Existe-t-il une convention pour nommer les énumérations en Java?
Ma préférence est qu'une énumération est un type. Ainsi, par exemple, vous avez une énumération
Fruit{Apple,Orange,Banana,Pear, ... }
NetworkConnectionType{LAN,Data_3g,Data_4g, ... }
Je m'oppose à le nommer:
FruitEnum
NetworkConnectionTypeEnum
Je comprends qu'il est facile de sélectionner les fichiers qui sont des énumérations, mais vous auriez également:
NetworkConnectionClass
FruitClass
Existe-t-il également un bon document décrivant la même chose pour les constantes, où les déclarer, etc.?
java
standards
coding-style
Walter White
la source
la source
Réponses:
Les énumérations sont des classes et doivent suivre les conventions des classes. Les instances d'une énumération sont des constantes et doivent suivre les conventions des constantes. Alors
Il n'y a aucune raison d'écrire FruitEnum plus que FruitClass. Vous perdez simplement quatre (ou cinq) caractères qui n'ajoutent aucune information.
Java lui-même recommande cette approche et elle est utilisée dans leurs exemples .
la source
Cela ne me fera probablement pas beaucoup de nouveaux amis, mais il faut ajouter que les personnes C # ont une directive différente: les instances enum sont "cas Pascal" (majuscules / minuscules mixtes). Voir la discussion stackoverflow et les directives de dénomination des types d'énumération MSDN .
Comme nous échangeons des données avec un système C #, je suis tenté de copier leurs énumérations exactement, en ignorant la convention de Java "les constantes ont des noms en majuscules". En y réfléchissant, je ne vois pas beaucoup de valeur à être limité aux majuscules pour les instances enum. À certaines fins, .name () est un raccourci pratique pour obtenir une représentation lisible d'une constante enum et un nom de casse mixte serait plus joli.
Donc, oui, j'ose remettre en question la valeur de la convention de dénomination Java enum. Le fait que "l'autre moitié du monde de la programmation" utilise effectivement un style différent me fait penser qu'il est légitime de douter de notre propre religion.
la source
Comme déjà indiqué, les instances d'énumération doivent être en majuscules selon les documents sur le site Web Oracle ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ).
Cependant, en parcourant un didacticiel JavaEE7 sur le site Web d'Oracle ( http://www.oracle.com/technetwork/java/javaee/downloads/index.html ), je suis tombé sur le didacticiel "Duke's bookstore" et dans une classe (
tutorial\examples\case-studies\dukes-bookstore\src\main\java\javaeetutorial\dukesbookstore\components\AreaComponent.java
), J'ai trouvé la définition d'énumération suivante:Selon les conventions, cela aurait dû ressembler à:
Il semble donc que même les gars d'Oracle négocient parfois les conventions avec commodité.
la source
Dans notre base de code; nous déclarons généralement des énumérations dans la classe à laquelle ils appartiennent.
Donc, pour votre exemple Fruit, nous aurions une classe Fruit, et à l'intérieur un Enum appelé Fruits.
Le référencer dans le code ressemble à ceci:,
Fruit.Fruits.Apple, Fruit.Fruits.Pear
etc.Les constantes suivent la même ligne, où elles sont soit définies dans la classe à laquelle elles sont pertinentes (donc quelque chose comme
Fruit.ORANGE_BUSHEL_SIZE
); ou s'ils s'appliquent à l'échelle du système (c'est-à-dire une "valeur nulle" équivalente pour les entiers) dans une classe nommée "ConstantManager" (ou équivalent; commeConstantManager.NULL_INT
). (note latérale; toutes nos constantes sont en majuscules)Comme toujours, vos normes de codage diffèrent probablement des miennes; donc YMMV.
la source
Lists
etMaps
. À mon avis, c'est une bonne convention et je soutiens pleinement son utilisation plus répandue.Fruit.Fruits.Apple
est trop verbeux pour moi, brisant littéralement le principe SEC :-) Je préférerais par exempleFruit.Type.APPLE
.Ce sont toujours des types, donc j'utilise toujours les mêmes conventions de dénomination que j'utilise pour les classes.
Je voudrais vraiment froncer les sourcils en mettant "Class" ou "Enum" dans un nom. Si vous avez à la fois a
FruitClass
et a,FruitEnum
alors quelque chose d'autre ne va pas et vous avez besoin de noms plus descriptifs. J'essaie de penser au type de code qui conduirait à avoir besoin des deux, et il semble qu'il devrait y avoir uneFruit
classe de base avec des sous-types au lieu d'une énumération. (C'est juste ma propre spéculation cependant, vous pouvez avoir une situation différente de ce que j'imagine.)La meilleure référence que je peux trouver pour nommer les constantes vient du tutoriel Variables :
la source
Si je peux ajouter mes 0,02 $, je préfère utiliser PascalCase comme valeurs d'énumération en C.
En C, ils sont globalement globaux et PEER_CONNECTED devient vraiment fatigant par opposition à PeerConnected.
Bouffée d'air frais.
Littéralement, cela me fait respirer plus facilement.
En Java, il est possible d'utiliser des noms d'énumération bruts tant que vous les importez statiquement à partir d'une autre classe.
Maintenant, vous pouvez utiliser les noms non qualifiés que vous avez déjà qualifiés d'une manière différente.
Je pense (actuellement) à porter du code C sur Java et actuellement «déchiré» entre le choix de la convention Java (qui est plus verbeuse, plus longue et plus laide) et mon style C.
PeerConnected deviendrait PeerState.CONNECTED sauf dans les instructions switch, où il est CONNECTED.
Maintenant, il y a beaucoup à dire pour cette dernière convention et elle a l'air sympa mais certaines "phrases idiomatiques" telles que
if (s == PeerAvailable)
devenir semblablesif (s == PeerState.AVAILABLE)
et nostalgiques, c'est une perte de sens pour moi.Je pense que je préfère toujours le style Java à cause de la clarté, mais j'ai du mal à regarder le code hurlant.
Maintenant, je me rends compte que PascalCase est déjà largement utilisé en Java, mais très confus ce ne serait pas vraiment, juste un peu à sa place.
la source
c'est (approximativement) comme dire
donc je suppose que les majuscules sont strictement plus correctes, mais j'utilise toujours la convention de nom de classe car je déteste toutes les majuscules partout
la source