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é?