2008-10-21 15 views
7

Existe-t-il un moyen d'écrire une énumération pouvant être étendue. J'ai plusieurs méthodes que je voudrais avoir toujours disponibles pour mes énumérations. Par exemple j'utilise une énumération pour mes champs de base de données. J'inclus le nom du champ dans la base de données.Énumération Java extensible

public enum ORDERFIELDS 
     { 
      OrderID("Order_ID"); 
      private String FieldName; 

      private ORDERFIELDS(String fname) 
       { 
        this.FieldName = fname; 
       } 

      public String getFieldName() 
       { 
        return FieldName; 
       } 
     } 

Répondre

10

Si je comprends bien, ce que vous voulez faire est quelque chose comme ceci:

public abstract class DatabaseField { 
    private String fieldName; 

    private DatabaseField(String fieldName) { 
     this.fieldName = fieldName; 
    } 

    public String getFieldName() { 
     return fieldName; 
    } 
} 

Définissez ensuite votre ENUM pour étendre cette classe. Cependant, malheureusement une énumération ne peut pas étendre une classe, mais elle peut implémenter une interface, donc le mieux que vous pouvez faire pour le moment est de définir une interface qui inclut la méthode getFieldName() et que toutes vos enums implémentent cette interface. Toutefois, cela signifie que vous devrez dupliquer l'implémentation de cette méthode (et d'autres) dans toutes vos énumérations. Il y a quelques suggestions dans this question sur les moyens de minimiser cette duplication.

16

Toutes les énumérations étendent implicitement java.lang.Enum. Étant donné que Java ne prend pas en charge l'héritage multiple, une énumération ne peut pas étendre quoi que ce soit d'autre.

6

Les énumérations peuvent implémenter des interfaces mais ne peuvent pas s'étendre car, lorsqu'elles sont compilées, elles sont traduites en java.lang.Enum.

+0

Je pense que c'est la conception la plus sensible ici non? Si une énumération implémente la bonne interface, alors vous savez qu'il s'agit d'une énumération de champs de base de données. –

0

Pour un retour à l'avant Java 5 jours, jetez un oeil à Item 21, Chapter 5,Effective Java by Josh Bloch. Il parle d'étendre "enums" en ajoutant des valeurs, mais peut-être que vous pourriez utiliser certaines des techniques pour ajouter une nouvelle méthode?

0

profilarion l'ENUM dans un mécanisme similaire à qui a défini dans Java efficace de Josh Bloch.

J'ajouterais que si vous devez "étendre" l'énumération, alors une énumération n'est peut-être pas la construction que vous recherchez. Ils sont destinés à être des constantes statiques à mon humble avis.