J'aimerais pouvoir définir une classe Enum qui inclurait une autre énumée ainsi que ses propres valeurs. Par exemple,:
public enum A { A1, A2, A3; } public enum B{ B1, B2, ...(somehow define references to all values in enum A) }
4 Réponses :
tel que B code> est l'union de
A code> et
b code>? Ce n'est pas possible sans
B code> extension
A code>, qui est non pris en charge en Java. La façon de procéder consiste à créer un
Enum code> qui contient les valeurs combinées de
A code> et
b code>, par exemple
(Ce serait a code> extension
b code>.)
quelque chose comme ça?
Merci à tous pour vos réponses. On dirait qu'il n'y a pas de moyen facile de faire ce que j'avais à l'esprit. J'ai eu à la place choisi d'utiliser une classe de plan Java pour imiter une telle caractéristique.
Le plus proche que vous puissiez obtenir est d'avoir A et B implémenter une interface partagée.
enum A implements MyEnum{A1,A2} enum B implements MyEnum{B1,B2} MyEnum e = B.B1;
Typiquement, puisque nous travaillons en Java et proscrivez généralement à OO Design, vous pouvez obtenir cette fonctionnalité à travers l'extension. Cependant, les énums étendent java.lang.enum implicitement et donc ne peuvent pas prolonger une autre classe. Em> cette extensibilité pour les énumes la plupart sont dérivés d'une source différente. P> Joshua bloch Addesses Ceci dans Efficace Java: Deuxième édition EM> dans le poste 34, lorsqu'il présente un modèle d'interface partagé pour Enums. Voici son exemple de motif: p> public interface Operation {
double apply(double x, double y);
}
public enum BasicOperation implements Operation {
PLUS("+") {
public double apply(double x, double y) { return x + y; }
},
MINUS("-") {
public double apply(double x, double y) { return x - y; }
},
TIMES("*") {
public double apply(double x, double y) { return x * y; }
},
DIVIDE("/") {
public double apply(double x, double y) { return x / y; }
}
Pourquoi auriez-vous besoin d'étendre un énumé?