11
votes

Nibling Enums en Java

Je veux nier quelques énumes. L'objet que je représente sont des drapeaux, avec un type et une valeur. Il existe un nombre discret de types et chaque type a un ensemble distinct de valeurs possibles.

Donc, si le type A peut avoir des valeurs 1, 2 ou 3 et le type B peut avoir des valeurs 4,5,6, je voudrais aimer être capable de faire des choses comme: xxx

Je me rends fou essayant de nicher Enums dans Enums - est-ce que j'essaie de passer? Enums complètement et artisanal une classe statique avec des membres statiques?

Mes meilleurs efforts sont: xxx

mais si je le fais: < Pré> xxx

Les types sont incompatibles.


3 commentaires

Vous ne pouvez pas utiliser 1 ou 4 comme identifiant pour vos valeurs ENUM. Soin d'intégrer plus de code source?


Un Enum ne peut pas étendre une classe .


Et d'être un peu plus verbose: un Enum étend automatiquement Enum (où E est le Enum Type) et Java ont uniquement une héritage unique.


3 Réponses :


12
votes

Vous ne pouvez pas avoir de numéro enum. Il doit s'agir d'un identifiant.

Vous pouvez faire ce p> xxx pré>

Cependant, une option plus simple peut être p>

enum Flag {
    A1, A2, A3, B4, B5, B6;
    public String getType() { return name().substring(0,1); }
    public int getValue() { return name().charAt(1) - '0'; }
}

Flag f = Flag.A1;


2 commentaires

Je pense qu'il serait préférable d'utiliser une classe finale publique avec un constructeur privé au lieu d'une interface pour le drapeau.


@deinocheirus Comment utiliserait un Classe finale publique dans le premier exemple où il y a plusieurs sous-classes? BTW AN ENUM est une classe finale publique avec des constructeurs privés.



3
votes

Nibling Enums n'est pas possible. Mais Enums peut implémenter des interfaces. Pourquoi ne pas avoir A et B comme deux enums différents qui implémentent une interface TypeDenum avec gettype () et < Code> GetValue () Méthodes?


0 commentaires

1
votes

Si je comprends que je comprenne Enums, ils sont une sorte de singletons. Cela signifie Enum x {A, B} a deux instances singleton a, b. Si vous aviez imbriqué Enum A {P, Q}, comment vous pouvez dire si x.a est x.a.p ou x.a.q? J'aimerais avoir pu le dire plus simplement.

Utiliser une classe statique.


0 commentaires