Em algumas interfaces que escrevi, gostaria de nomear parâmetros de tipo genérico com mais de um caractere para tornar o código mais legível.
Algo como....
Map<Key,Value>
Em vez disso ...
Map<K,V>
Mas quando se trata de métodos, os parâmetros de tipo se parecem com classes java, o que também é confuso.
public void put(Key key, Value value)
Parece que Key e Value são classes. Encontrei ou pensei em algumas anotações, mas nada como uma convenção da Sun ou uma prática recomendada geral.
Alternativas que adivinhei ou encontrei ...
Map<KEY,VALUE>
Map<TKey,TValue>
java
generics
naming-conventions
chaper29
fonte
fonte
Respostas:
A Oracle recomenda o seguinte em Tutoriais Java> Genéricos> Tipos Genéricos :
Eu me ateria a isso para evitar a confusão entre os desenvolvedores e possíveis mantenedores.
fonte
R
para resultado eA
para acumulador.Element
inList<Element>
é um tipo parametrizado ou uma classe?BiFunction<T, U, R>
segue esta convenção. Se tivesse, seriaBiFunction<T, S, R>
.Acrescentar
Type
Uma boa discussão pode ser encontrada nos comentários na página do DZone, Convenções de nomenclatura para tipos parametrizados .
Veja o comentário de Erwin Mueller. Sua sugestão faz todo o sentido óbvio para mim: acrescente a palavra
Type
.Chame uma maçã de maçã, um carro, um carro. O nome em questão é o nome de um tipo de dados, certo? (No OOP , uma classe define essencialmente um novo tipo de dados.) Então, chame-o de "Tipo".
O exemplo de Mueller, extraído do artigo da postagem original:
Acrescentar
T
Uma pergunta duplicada fornece esta resposta por Andy Thomas. Observe o trecho do guia de estilo do Google que sugere que um nome de tipo com vários caracteres termine com uma única maiúscula
T
.fonte
O motivo pelo qual a convenção de nomenclatura oficial recomenda o uso de uma única letra é o seguinte:
Eu acho que com os IDEs modernos esse motivo não é mais válido como por exemplo. O IntelliJ Idea mostra parâmetros de tipo genérico com cores diferentes das classes regulares.
Código com tipo genérico, conforme exibido no IntelliJ Idea 2016.1
Por causa dessa distinção , uso nomes descritivos mais longos para meus tipos genéricos, com a mesma convenção que os tipos regulares. Evito adicionar prefixos e sufixos como T ou Type, pois os considero ruídos desnecessários e não são mais necessários para distinguir visualmente tipos genéricos.
Nota: Como não sou usuário do Eclipse ou do Netbeans, não sei se eles oferecem um recurso semelhante.
fonte
Sim, você pode usar nomes com vários caracteres para variáveis de tipo, desde que elas sejam claramente diferenciadas dos nomes de classe.
Isso difere da convenção sugerida pela Sun com a introdução de genéricos em 2004. No entanto:
Legibilidade
A legibilidade é boa.
Comparar:
para:
ou, com a convenção de vários caracteres do Google:
Estilo do Google
O Google Java Style Guide permite nomes de uma letra e nomes de classes com vários caracteres que terminam em T.
Problemas
Nomes de caracteres únicos não são a única maneira de distinguir parâmetros de tipo de nomes de classe, como vimos acima.
É verdade que os
@param
elementos JavaDoc podem fornecer uma descrição mais longa. Mas também é verdade que os JavaDocs não são necessariamente visíveis. (Por exemplo, há um assistente de conteúdo no Eclipse que mostra os nomes dos parâmetros de tipo.)Muitas das convenções originais da Sun são seguidas quase universalmente na programação Java.
No entanto, esta convenção em particular não é.
A melhor escolha entre convenções concorrentes é uma questão de opinião. As consequências de escolher uma convenção diferente da Oracle neste caso são pequenas. Você e sua equipe podem escolher uma convenção que melhor atenda às suas necessidades.
fonte
Você pode usar o javadoc para, pelo menos, dar uma dica aos usuários de sua classe genérica. Ainda não gosto (concordo com @ chaper29), mas os documentos ajudam.
por exemplo,
A outra coisa que soube fazer é usar meu IDE para refatorar uma classe que viola a convenção. Em seguida, trabalhe no código e refatorar para letras únicas. Torna mais fácil para mim, de qualquer maneira, se muitos parâmetros de tipo forem usados.
fonte