2011-09-12 10 views
14

Estoy leyendo el capítulo sobre genéricos de Java efectivo [elemento 27].¿Qué significa "Tipo recursivo obligado" en Genéricos?

No es este párrafo en el libro:

Es permisible, aunque relativamente rara, para un parámetro de tipo a estar delimitado por alguna expresión que implica que el 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) {...} 

Lo que está obligado tipo recursivo y cómo la pieza anterior de ayuda mutua código de lograr la comparabilidad?

+2

Su primera cita responde a la primera de sus dos preguntas, ¿verdad? – NPE

+0

Sí lo hace:) ... – vinoth

Respuesta

17

Lo que se une tipo recursivo

Este: <T extends Comparable<T>>

Tenga en cuenta que el parámetro de tipo T es también parte de la firma de la interfaz súper Comparable<T>.

y cómo la pieza de código anterior ayuda a lograr la comparabilidad mutua?

Asegura que solo puede comparar objetos del tipo T. Sin el tipo vinculado, Comparable compara cualquiera de los dos Object s. Con el tipo vinculado, el compilador puede garantizar que solo se comparen dos objetos de tipo T.

Cuestiones relacionadas