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:
- Mais de uma convenção existe.
- Os nomes com vários caracteres são consistentes com outros estilos Java, como o estilo do Google para Java .
- Os nomes legíveis são (surpresa!) Mais legíveis.
Legibilidade
Em algumas interfaces que escrevi, gostaria de nomear o parâmetro de tipo genérico com mais de um caractere para tornar o código mais legível.
A legibilidade é boa.
Comparar:
public final class EventProducer<L extends IEventListener<E>,E>
implements IEventProducer<L,E> {
para:
public final class EventProducer<LISTENER extends IEventListener<EVENT>,EVENT>
implements IEventProducer<LISTENER, EVENT> {
ou, com a convenção de vários caracteres do Google:
public final class EventProducer<ListenerT extends IEventListener<EventT>,EventT>
implements IEventProducer<ListenerT, EventT> {
public final class EventProducer<ListenerT extends IEventListener<EventT>,EventT>
implements IEventProducer<ListenerT, EventT> {
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.
5.2.8 Digite nomes de variáveis
Cada variável de tipo é nomeada em um dos dois estilos:
Uma única letra maiúscula, seguida opcionalmente por um único número (por exemplo, E
, T
, X
, T2
)
Um nome no formulário utilizado para aulas (ver Secção 5.2.2, nomes de classe ), seguido pela letra T (exemplos: RequestT
, FooBarT
).
Problemas
"Sem essa convenção, seria difícil dizer a diferença entre uma variável de tipo e uma classe ou nome de interface comum". - nos tutoriais da Oracle, "Tipos genéricos"
Nomes de caracteres únicos não são a única maneira de distinguir parâmetros de tipo de nomes de classe, como vimos acima.
Por que não apenas documentar o significado do parâmetro type no JavaDoc?
É 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.)
Os nomes de parâmetros do tipo com vários caracteres não seguem a convenção da Oracle!
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.