2010-10-27 3 views
0

Je veux améliorer mon utilisation de JDK 1.5 et cesser d'utiliser static private String au lieu de ENUM. C'est ce qui semble être recommandé.Java ENUM dans la pratique, le mauvais code pour améliorer

Mais maintenant ma constante de classe ressemble à ceci:

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; 
     }  
    } 
} 

au lieu de

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"); 

...  
    } 
} 

Mon code semble être vraiment mauvais, mais au moins fonctionne. Pour chaque énumération, je dois ajouter le code redondant:

private final String sName; 

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

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

Quelle amélioration me conseillez-vous? Note: oubliez les dernières phrases de ma première question, j'ai besoin de l'index. Dites-moi si je dois poster une autre question, éditer mon fisrt semble plus facile.

Répondre

3

Je citerais mes ENUM constantes que vous avez nommé vos cordes. Vous pouvez ensuite accéder au nom en utilisant la méthode Enum.toString(). Par exemple:

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

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

Vous pouvez bien sûr sauter aussi getType() tous ensemble, et accédez au "type" à l'aide toString() à la place:

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

Selon l'API, ce qui est mieux que en utilisant le Enum.name() directement:

public final String name()
                [...] La plupart des programmeurs doivent utiliser la méthode toString() de préférence à celui-ci [...]

+0

Cela vaut mieux que la réponse de ma première question merci. J'ai utilisé la méthode name au lieu de toString. – jayjaypg22

2

Chaque ENUM a un nom () méthode qui retourne la représentation exacte de la chaîne de caractères. Ainsi, vous pouvez faire ceci:

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

puis

ListTypeAffichage.DEPOT_TVA.name(); 
0

En utilisant les abréviations (DEP, PAD, etc.) NORM vous avez créé des alias pour (DEPOT_TVA, PAS_DEPOT_TVA, CAT_NORMALE), etc.

Si vous souhaitez conserver les abréviations, alors vous devez maintenir la ENUM comme vous l'avez.

Si vous êtes prêt à en finir avec les abréviations, vous pouvez modifier vous ENUM comme ci-dessous, j'ai inclus une méthode principale dans le ENUM pour démontrer son utilisation.

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()); 
    } 
} 

En plus de cela, votre structure actuelle des constantes ne vous donne pas compilez la vérification du type de temps, et ne l'empêche pas quelque chose comme ce qui suit passe au cours de l'exécution:

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