6
votes

Java Enum référençant un autre énum

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)
}


1 commentaires

Pourquoi auriez-vous besoin d'étendre un énumé?


4 Réponses :


5
votes

tel que B est l'union de A et b ? Ce n'est pas possible sans B extension A , qui est non pris en charge en Java. La façon de procéder consiste à créer un Enum qui contient les valeurs combinées de A et b , par exemple xxx


1 commentaires

(Ce serait a extension b .)



3
votes

quelque chose comme ça? XXX


1 commentaires

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.



1
votes

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;


0 commentaires

2
votes

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; }
    }


0 commentaires