java - ¿Qué significa "límite de tipo recursivo" en Genéricos?
generics effective-java (2)
¿Qué es el tipo recursivo vinculado?
Esto: <T extends Comparable<T>>
Tenga en cuenta que el parámetro de tipo T
también forma parte de la firma de la super interfaz Comparable<T>
.
¿Y cómo la pieza de código anterior ayuda a lograr la comparabilidad mutua?
Asegura que solo puedes comparar objetos de tipo T
Sin el tipo de límite, Comparable
compara cualquiera de los dos Object
. Con el tipo enlazado, el compilador puede garantizar que solo se comparan dos objetos de tipo T
Estoy leyendo el capítulo sobre genéricos de Java efectiva [Artículo 27].
Hay este párrafo en el libro:
Es permisible, aunque relativamente raro, que un parámetro de tipo esté delimitado por alguna expresión que incluya ese parámetro de tipo en sí. Esto es lo que se conoce como un tipo de enlace recursivo.
y esto:
// Using a recursive type bound to express mutual comparability
public static <T extends Comparable<T>> T max(List<T> list) {...}
¿Qué es el tipo de enlace recursivo y cómo la pieza de código anterior ayuda a lograr la comparabilidad mutua?
Hay una entrada en las Preguntas frecuentes de Java Generics escrita por Angelika Langer que explica los detalles de dicha declaración: http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ106