2010-10-27 1 views
0

Я хочу улучшить свое использование JDK 1.5 и прекратить использование частной статической конечной строки вместо enum. Это то, что, как представляется, рекомендуется.Java enum на практике, плохой код для улучшения

Но теперь мой постоянный класс выглядит следующим образом:

public class CEnum{ 
    /** 
    * @author JJA 
    * date : 20/10/2010 
    */ 
    public enum ListTypeAffichage { 
     DEP("DEPOT_TVA"), PAD("PAS_DEPOT_TVA"), NORM("CAT_NORMALE"), CAP("CAT_PARTICULIERE"), CAA("CAT_AUTRE_CAS"); 

     private final String sName; 

     /** 
     * @param name String 
     */  
     ListTypeAffichage(String name) { 
      this.sName = name; 
     } 

     /** 
     * @return String 
     */ 
     public String getType() { 
      return sName; 
     }   
    } 

    /** 
    * @author JJA 
    * date : 20/10/2010 
    */ 
    public enum ListTypeCategorie { 
     DEDUIRE("SOMME_A_DEDUIRE"), AJOUTER("SOMME_A_AJOUTER"); 

     private final String sName; 

     /** 
     * @param name String 
     */ 
     ListTypeCategorie(String name) { 
      this.sName = name; 
     } 

     /** 
     * @return String 
     */ 
     public String getType() { 
      return sName; 
     }  
    } 

    /** 
    * @author JJA 
    * date : 26/10/2010 
    */ 
    public enum ListInterval { 
     POS("POSITIF"), NS("NON_SIGNE"); 

     private final String sName; 

     /** 
     * @param name String 
     */ 
     ListInterval(String name) { 
      this.sName = name; 
     } 

     /** 
     * @return String 
     */ 
     public String getInterval() { 
      return sName; 
     }  
    } 
} 

вместо

public class ConstantesADMD { 
    public static final List<String> typeAffich = new ArrayList<String>(); 
... 
    ConstantesADMD(){ 
     typeAffich.add("DEPOT_TVA"); 
     typeAffich.add("PAS_DEPOT_TVA"); 
     typeAffich.add("CAT_NORMALE"); 

...  
    } 
} 

мой код, кажется, очень плохо, но, по крайней мере, работает. Для каждого перечисления я должен добавить избыточный код:

private final String sName; 

/** 
* @param name String 
*/  
ListTypeAffichage(String name) { 
    this.sName = name; 
} 

/** 
* @return String 
*/ 
public String getType() { 
    return sName; 
} 

Какое качество вы мне посоветуете? Примечание: забудьте о последних предложениях моего первого вопроса, мне нужен индекс. Скажите мне, если мне придется опубликовать другой вопрос, редактирование моего fisrt кажется проще.

ответ

3

Я бы назвал свои enum-константы, как вы назвали ваши строки. Затем вы можете получить доступ к имени с помощью метода Enum.toString(). Например:

public enum ListTypeAffichage { 
    DEPOT_TVA, PAS_DEPOT_TVA, CAT_NORMALE, CAT_PARTICULIERE, CAT_AUTRE_CAS; 

    /** 
    * @return String 
    */ 
    public String getType() { 
     return toString(); 
    }   
} 

Конечно, вы можете также пропустить getType() все вместе, и получить доступ к «типу» с помощью toString() вместо:

ListTypeAffichage myEnum = ListTypeAffichage.CAT_PARTICULIRE; 
System.out.println("Type: " + myEnum.toString());    // like this... 
System.out.println("Type: " + myEnum);      // ...or like this 

Согласно API, это лучше, чем используя Enum.name() непосредственно:

public final String name()
                [...] Большинство программистов следует использовать метод ToString() в предпочтении к этому один [...]

+0

Это лучше, чем ответ моего первого вопроса спасибо. Я использовал метод name вместо toString. – jayjaypg22

2

Каждое перечисление имеет имя (), которые возвращают точное представление строки константы. Таким образом, вы можете сделать это:

public enum ListTypeAffichage { 
     DEPOT_TVA, PAS_DEPOT_TVA, CAT_NORMALE, CAT_PARTICULIERE, CAT_AUTRE_CAS     
    } 

, а затем

ListTypeAffichage.DEPOT_TVA.name(); 
0

При использовании сокращений (DEP, PAD, NORM) и т.д. вы создали псевдонимы (DEPOT_TVA, PAS_DEPOT_TVA, CAT_NORMALE) и т.д.

Если вы хотите сохранить аббревиатуры, вам нужно будет сохранить перечисление, как у вас есть.

Если вы готовы покончить с аббревиатурами, то вы можете изменить перечисление, как показано ниже, я включил основной метод в перечисление, чтобы продемонстрировать его использование.

public enum ListTypeAffichageNames { 
    DEPOT_TVA, 
    PAS_DEPOT_TVA, 
    CAT_NORMALE, 
    CAT_PARTICULIERE, 
    CAT_AUTRE_CAS; 


    public static void main(String[] args) { 
     System.out.println(DEPOT_TVA.toString()); 
     ListTypeAffichageNames affichage = ListTypeAffichageNames.valueOf("DEPOT_TVA"); 
     System.out.println(affichage.toString()); 
    } 
} 

В дополнение к этому, текущая структура констант не дает компиляции проверку типов времени, и не мешает что-то вроде следующего происходит во время выполнения:

ConstantesADMD.typeAffich.clear(); 
    // or 
    ConstantesADMD.typeAffich.remove("DEPOT_TVA"); 
    ConstantesADMD.typeAffich.add("dEpOt-tVa"); 

 Смежные вопросы

  • Нет связанных вопросов^_^