Existe uma convenção para nomear enumerações em Java?
Minha preferência é que um enum seja um tipo. Então, por exemplo, você tem um enum
Fruit{Apple,Orange,Banana,Pear, ... }
NetworkConnectionType{LAN,Data_3g,Data_4g, ... }
Sou contra o nome:
FruitEnum
NetworkConnectionTypeEnum
Entendo que é fácil escolher quais arquivos são enumerados, mas você também teria:
NetworkConnectionClass
FruitClass
Além disso, existe um bom documento descrevendo o mesmo para constantes, onde declará-las etc.?
java
standards
coding-style
Walter White
fonte
fonte
Respostas:
Enums são aulas e devem seguir as convenções para as aulas. Instâncias de um enum são constantes e devem seguir as convenções para constantes. assim
Não há razão para escrever FruitEnum mais do que FruitClass. Você está desperdiçando apenas quatro (ou cinco) caracteres que não adicionam informações.
O próprio Java recomenda essa abordagem e é usada em seus exemplos .
fonte
Provavelmente isso não fará de mim muitos novos amigos, mas deve-se acrescentar que as pessoas do C # têm uma orientação diferente: as instâncias enum são "caso Pascal" (maiúsculas / minúsculas). Consulte a discussão stackoverflow e as Diretrizes de nomeação de tipos de enumeração do MSDN .
Como estamos trocando dados com um sistema C #, sou tentado a copiar exatamente suas enumerações, ignorando a convenção "constantes com nomes em maiúsculas" de Java. Pensando nisso, não vejo muito valor em me restringir a maiúsculas para instâncias enum. Para alguns propósitos, .name () é um atalho útil para obter uma representação legível de uma constante enum e um nome de caso misto pareceria melhor.
Então, sim, ouso questionar o valor da convenção de nomenclatura enum Java. O fato de "a outra metade do mundo da programação" realmente usar um estilo diferente me faz pensar que é legítimo duvidar de nossa própria religião.
fonte
Como já foi dito, as instâncias enum devem estar em maiúsculas, de acordo com os documentos no site da Oracle ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ).
No entanto, enquanto examinava um tutorial sobre JavaEE7 no site da Oracle ( http://www.oracle.com/technetwork/java/javaee/downloads/index.html ), deparei-me com o tutorial "Duke's bookstore" e em uma classe (
tutorial\examples\case-studies\dukes-bookstore\src\main\java\javaeetutorial\dukesbookstore\components\AreaComponent.java
), Encontrei a seguinte definição de enumeração:De acordo com as convenções, deveria ter se parecido com:
Parece que até os funcionários da Oracle às vezes trocam convenções com conveniência.
fonte
Em nossa base de código; normalmente declaramos enumerações na classe a que pertencem.
Então, para o seu exemplo de frutas, teríamos uma classe de frutas e, dentro dela, um enum chamado frutas.
Referenciá-lo no código é semelhante a:,
Fruit.Fruits.Apple, Fruit.Fruits.Pear
etc.As constantes seguem a mesma linha, onde são definidas na classe para a qual são relevantes (algo assim
Fruit.ORANGE_BUSHEL_SIZE
); ou se eles aplicarem todo o sistema (ou seja, um "valor nulo" equivalente para ints) em uma classe chamada "ConstantManager" (ou equivalente; semelhanteConstantManager.NULL_INT
). (nota lateral; todas as nossas constantes estão em maiúsculas)Como sempre, seus padrões de codificação provavelmente diferem dos meus; então YMMV.
fonte
Lists
eMaps
. Na minha opinião, esta é uma boa convenção e eu apoio totalmente seu uso mais amplo.Fruit.Fruits.Apple
é muito detalhado para mim, literalmente quebrando o princípio DRY :-) Eu preferiria, por exemploFruit.Type.APPLE
.Ainda são tipos, então eu sempre uso as mesmas convenções de nomenclatura que uso nas aulas.
Eu definitivamente desaprovaria colocar "Class" ou "Enum" em um nome. Se você tem um
FruitClass
e umFruitEnum
, algo está errado e você precisa de nomes mais descritivos. Estou tentando pensar no tipo de código que levaria à necessidade de ambos, e parece que deveria haver umaFruit
classe base com subtipos em vez de enumeração. (Mas isso é apenas minha própria especulação, você pode ter uma situação diferente da que estou imaginando.)A melhor referência que posso encontrar para nomear constantes vem do tutorial Variáveis :
fonte
Se posso adicionar meus US $ 0,02, prefiro usar PascalCase como valores de enumeração em C.
Em C, eles são basicamente globais, e PEER_CONNECTED fica muito cansativo em oposição ao PeerConnected.
Respiração de ar fresco.
Literalmente, isso me faz respirar mais fácil.
Em Java, é possível usar nomes de enum brutos, desde que você os importe de forma estática de outra classe.
Agora, você pode usar os nomes não qualificados, que você qualificou de uma maneira diferente.
Atualmente (estou pensando) em portar algum código C para Java e atualmente 'dividido' entre escolher a convenção Java (que é mais detalhada, mais longa e mais feia) e meu estilo C.
PeerConnected se tornaria PeerState.CONNECTED, exceto nas instruções do switch, onde está CONNECTED.
Agora, há muito a dizer sobre a última convenção e parece bom, mas certas "frases idiomáticas", como
if (s == PeerAvailable)
se tornamif (s == PeerState.AVAILABLE)
e nostalgicamente, isso é uma perda de significado para mim.Acho que ainda prefiro o estilo Java por causa da clareza, mas tenho dificuldade em analisar o código gritante.
Agora percebo que o PascalCase já é amplamente usado em Java, mas muito confuso, não seria realmente, apenas um pouco fora do lugar.
fonte
é (aproximadamente) como dizer
então acho que as letras maiúsculas são estritamente mais corretas, mas ainda uso a convenção de nome de classe, já que odeio letras maiúsculas
fonte