En algunas interfaces que escribí, me gustaría nombrar parámetros de tipo genérico con más de un carácter para que el código sea más legible.
Algo como....
Map<Key,Value>
En lugar de esto...
Map<K,V>
Pero cuando se trata de métodos, los parámetros de tipo se parecen a las clases java, lo que también es confuso.
public void put(Key key, Value value)
Esto parece que Key y Value son clases. Encontré o pensé en algunas anotaciones, pero nada como una convención de Sun o una mejor práctica general.
Alternativas que adiviné o encontré ...
Map<KEY,VALUE>
Map<TKey,TValue>
java
generics
naming-conventions
chaper29
fuente
fuente
Respuestas:
Oracle recomienda lo siguiente en Tutoriales de Java> Genéricos> Tipos genéricos :
Me apegaría a ello para evitar la confusión entre los desarrolladores y posibles mantenedores.
fuente
R
para el resultado yA
para el acumulador.Element
inList<Element>
es un tipo parametrizado o una clase?BiFunction<T, U, R>
siga esta convención. Si lo hiciera, lo seríaBiFunction<T, S, R>
.Adjuntar
Type
Se puede encontrar una buena discusión en los comentarios en la página DZone, Convenciones de nomenclatura para tipos parametrizados .
Ver el comentario de Erwin Mueller. Su sugerencia tiene mucho sentido para mí: anexar la palabra
Type
.Llame a una manzana una manzana, un auto un auto El nombre en cuestión es el nombre de un tipo de datos, ¿verdad? (En OOP , una clase esencialmente define un nuevo tipo de datos). Así que llámelo "Tipo".
El ejemplo de Mueller, extraído del artículo de la publicación original:
Adjuntar
T
Una pregunta duplicada proporciona esta respuesta por Andy Thomas. Tenga en cuenta el extracto de la guía de estilo de Google que sugiere que un nombre de tipo de varios caracteres debe terminar en mayúscula
T
.fuente
La razón por la cual la convención oficial de nombres recomienda el uso de una sola letra es la siguiente:
Creo que con los IDE modernos esa razón ya no es válida, por ejemplo. IntelliJ Idea muestra parámetros de tipo genérico con diferentes colores que las clases regulares.
Código con tipo genérico como se muestra en IntelliJ Idea 2016.1
Debido a esa distinción , uso nombres descriptivos más largos para mis tipos genéricos, con la misma convención que los tipos normales. Evito agregar prefijos y sufijos como T o Type porque los considero ruidos innecesarios y ya no necesito distinguir visualmente los tipos genéricos.
Nota: Como no soy usuario de Eclipse o Netbeans, no sé si ofrecen una función similar.
fuente
Sí, puede usar nombres de varios caracteres para las variables de tipo, siempre que se distingan claramente de los nombres de clase.
Esto difiere de la convención sugerida por Sun con la introducción de genéricos en 2004. Sin embargo:
Legibilidad
La legibilidad es buena.
Comparar:
a:
o, con la convención de caracteres múltiples de Google:
Estilo de Google
La Guía de estilo de Java de Google permite nombres de una sola letra y nombres de clase de varios caracteres que terminan en T.
Cuestiones
Los nombres de un solo carácter no son la única forma de distinguir los parámetros de tipo de los nombres de clase, como hemos visto anteriormente.
Es cierto que los
@param
elementos JavaDoc pueden proporcionar una descripción más larga. Pero también es cierto que los JavaDocs no son necesariamente visibles. (Por ejemplo, hay un asistente de contenido en Eclipse que muestra los nombres de los parámetros de tipo).Muchas de las convenciones originales de Sun se siguen casi universalmente en la programación Java.
Sin embargo, esta convención particular no lo es.
La mejor opción entre las convenciones en competencia es una cuestión de opinión. Las consecuencias de elegir una convención diferente a la de Oracle en este caso son menores. Usted y su equipo pueden elegir la convención que mejor satisfaga sus necesidades.
fuente
Puede usar javadoc para dar al menos una pista a los usuarios de su clase genérica. Todavía no me gusta (estoy de acuerdo con @ chaper29) pero los documentos ayudan.
p.ej,
La otra cosa que he sabido hacer es usar mi IDE para refactorizar una clase que rompe la convención. Luego trabaje en el código y refactorice a letras individuales. De todos modos, me resulta más fácil si se utilizan muchos parámetros de tipo.
fuente