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;
                }
        } 
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top