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: p> 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? P> Mes meilleurs efforts sont: p> mais si je le fais: p> < Pré> xxx pré> Les types sont incompatibles. p> p>
3 Réponses :
Vous ne pouvez pas avoir de numéro enum. Il doit s'agir d'un identifiant.
Vous pouvez faire ce p> 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;
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 Code> dans le premier exemple où il y a plusieurs sous-classes? BTW AN
ENUM CODE> est une classe finale publique avec des constructeurs privés.
Nibling Enums n'est pas possible. Mais Enums peut implémenter des interfaces. Pourquoi ne pas avoir A code> et
B code> comme deux enums différents qui implémentent une interface
TypeDenum code> avec
gettype () code> et < Code> GetValue () Code> Méthodes? P>
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. P>
Utiliser une classe statique. p>
Vous ne pouvez pas utiliser
1 code> ou
4 code> comme identifiant pour vos valeurs ENUM. Soin d'intégrer plus de code source?
Un
Enum code> ne peut pas étendre une classe
code>.
Et d'être un peu plus verbose: un
Enum code> étend automatiquement
Enum code> (où
E code> est le
Enum code> Type) et Java ont uniquement une héritage unique.