Énumération Java extensible
-
03-07-2019 - |
Question
Existe-t-il un moyen d'écrire une énumération qui peut être étendue? J'ai plusieurs méthodes que j'aimerais toujours disposer pour mes énumérations. Par exemple, j'utilise une énumération pour les champs de ma base de données. J'inclus le nom du champ actuel dans la base de données.
public enum ORDERFIELDS
{
OrderID("Order_ID");
private String FieldName;
private ORDERFIELDS(String fname)
{
this.FieldName = fname;
}
public String getFieldName()
{
return FieldName;
}
}
La solution
Si je comprends bien, ce que vous voudriez faire ressemble à ceci:
public abstract class DatabaseField {
private String fieldName;
private DatabaseField(String fieldName) {
this.fieldName = fieldName;
}
public String getFieldName() {
return fieldName;
}
}
Ensuite, définissez votre enum pour étendre cette classe. Cependant, malheureusement, une énumération ne peut pas étendre une classe, mais elle peut implémenter une interface. Pour l’instant, le mieux que vous puissiez faire est donc de définir une interface incluant la méthode getFieldName () et de faire en sorte que toutes vos énumérations implémentent cette interface.
Toutefois, cela signifie que vous devrez dupliquer la mise en oeuvre de cette méthode (et de toute autre méthode) dans tous vos enums. cette question contient des suggestions sur les moyens de réduire ce double emploi.
Autres conseils
Toutes les énumérations étendent implicitement java.lang.Enum
. Comme Java ne supporte pas l'héritage multiple, une énumération ne peut étendre quoi que ce soit d'autre.
Les énumérations peuvent implémenter des interfaces mais ne peuvent pas s'étendre car, une fois compilées, elles se traduisent en java.lang.Enum.
Les énumérations abstraites sont potentiellement très utiles (et actuellement interdites). Mais une proposition et un prototype existent si vous souhaitez faire pression sur quelqu'un de Sun pour l'ajouter:
http://freddy33.blogspot.com/ 2007/11 / abstract-enum-ricky-carlson-way.html
Sun RFE:
http://bugs.sun.com/bugdatabase/view_bug.do? bug_id = 6570766
Pour un retour aux cinq jours précédant Java, consultez Point 21, Chapitre 5, Effective Java par Josh Bloch . Il parle d’extension de "enums". en ajoutant des valeurs, mais peut-être pourriez-vous utiliser certaines des techniques pour ajouter une nouvelle méthode?
Créez l’énumération à la main selon un mécanisme similaire à celui défini dans Effective Java de Josh Bloch.
J'ajouterais que si vous avez besoin de " prolonger " l'énum, ??alors peut-être une enum n'est pas la construction que vous recherchez. Ils sont censés être des constantes statiques IMHO.