2011-09-12 11 views
14

Czytam rozdział o lekach generycznych z efektywnej Java [pozycja 27].Co oznacza "typ rekurencyjny związany" w języku ogólnym?

Jest to ustęp w książce:

Jest to dopuszczalne, choć stosunkowo rzadkie, dla parametru typu zostać ograniczony przez jakiegoś wyrazu z udziałem tego samego parametru typu. To jest znane jako typ rekursywny związany.

a to:

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

Co jest rekurencyjna typ związany i jak powyższy fragment kodu pomóc osiągnąć wzajemne porównywalność?

+2

Twój pierwszy cytat odbiera pierwszy swoich dwóch pytań, prawda? – NPE

+0

Tak, to robi:) ... – vinoth

Odpowiedz

17

Co jest rekurencyjna typ związany

to: <T extends Comparable<T>>

Należy zauważyć, że parametr typu T jest również częścią podpisania super interfejs Comparable<T>.

oraz w jaki sposób powyższy fragment kodu pomaga osiągnąć wzajemną porównywalność?

Zapewnia, że ​​można porównywać tylko obiekty typu T. Bez powiązanego typu, Comparable porównuje dowolne dwa Object s. Przy powiązanym typie kompilator może zapewnić porównywanie tylko dwóch obiektów typu T.