2011-09-12 18 views
14

Sto leggendo il capitolo su Generics from Java efficace [Articolo 27].Che cosa significa "Tipo ricorsivo associato" in Generics?

C'è questo paragrafo nel libro:

E 'consentito, anche se relativamente raro, per un parametro di tipo ad essere delimitata da qualche espressione che coinvolgono questo tipo parametro stesso. Questo è ciò che è noto come legato al tipo ricorsivo.

e questo:

// Using a recursive type bound to express mutual comparability 
public static <T extends Comparable<T>> T max(List<T> list) {...} 

Che è di tipo ricorsivo legato e in che modo il pezzo di codice di cui sopra aiuto ottenere la comparabilità reciproca?

+2

La tua prima citazione risponde alla prima delle vostre due domande, non è vero? – NPE

+0

Sì, sì:) ... – vinoth

risposta

17

Ciò che è di tipo ricorsivo legato

questo: <T extends Comparable<T>>

Si noti che il parametro di tipo T è anche parte della firma del super dell'interfaccia Comparable<T>.

e in che modo il codice di cui sopra consente di raggiungere la comparabilità reciproca?

Assicura che è possibile solo confrontare oggetti di tipo T. Senza il tipo associato, Comparable confronta qualsiasi due Object s. Con il tipo bound, il compilatore può garantire che vengano confrontati solo due oggetti di tipo T.