6
votes

Enum imbriqué - pourquoi est-il utilisé?

J'ai vu des constructions avec un énumé déclaré à l'intérieur d'une énumération. Qu'est-ce que c'est utilisé?


2 commentaires

Voici une pensée: comment faire un exemple de ce que vous demandez? Appelez-moi fou ...


Ok, tu es fou (quelqu'un a dû le faire :)).


3 Réponses :


7
votes

Enums en Java ne peut pas être prolongé, alors si vous voulez rassembler des énumes fortement liées au même endroit, vous pouvez utiliser ces constructions imbriquées enum. Par exemple:

 DepartmentsAndFaculties cs = DepartmentsAndFaculties.CS;
 cs.getTitle();


2 commentaires

Cela semble exactement comme ce que je dois faire. Actuellement, j'ai une classe détenant des énums liés. Mais dans votre code, je ne vois qu'un département d'énuméreux et des préparations déclarées. Où est l'autre énum?


L'autre énum? Les départementsAndfacultes sont enums et couvrent l'ONU, EF, CS et EE ENUMS. Vous pouvez vous référer à Sub-Enums via les départsandfaculties.xx où XX est un nom de référence de sous-Enum.



2
votes

Vous pourriez vouloir dire un énumé comme type interne. Ceci est le plus généralement vu lorsque le type externe est une classe ou une interface, mais je suppose qu'il n'y a aucune raison que cela ne pouvait pas être fait avec Enum comme externe.

Les types internes sont en partie sur l'organisation du code. Ils peuvent être utiles pour éviter de créer un tas de fichiers séparés lorsque vous avez quelques types liés. Parfois, il peut rendre le nom de type plus intuitif. Par exemple, voir la classe de carte et sa classe d'entrée interne. La plupart des références externes à l'entrée utiliseraient le format de carte.Entry, qui est très lisible.

L'autre motif des types internes est que si le type externe est une classe ou une énumération, le type interne peut être non public. Ceci est utile pour masquer les types de mise en œuvre des détails de l'extérieur.


1 commentaires

Oui, je veux dire Enum comme un type interne. Avez-vous des références de code qui utilisent Inner Enum?



0
votes

J'ai utilisé des énumérums imbriqués dans de rares cas où je souhaitais appliquer une convention de dénomination sur les valeurs ENUM, si des ajouts de nouveaux noms auraient des implications pour les opérations ou autres personnes. Voici un exemple: xxx

J'utilise un énumé parce que je veux pouvoir passer autour d'un "nom de modèle de message" générique dans divers endroits. Comme vous pouvez le constater, la première partie du nom Enum correspond à un répertoire sur un serveur et le reste du nom fait référence à un nom de fichier de modèle de vélocité. Si les autres ingénieurs ont commencé à introduire de nouvelles constantes, je voudrais veiller à ce qu'ils ont été déposés sous le "destinataire" approprié, ou si un nouveau destinataire doit légitimement être créé, que c'est un effort conscient de le faire, et vous informerez Opérations (créez le répertoire en production, mettre toute surveillance / autorisations en place, etc.).

Il y a un argument décent que, si, à un moment donné, votre énum devient trop complexe, vous pouvez le remplacer par une classe / Hiérarchie de classe couplée à une énumération beaucoup plus simple. Je ne sais pas où je dessine la ligne, mais je suppose que ce qui précède se dirige dans cette direction.


0 commentaires