2012-04-26 11 views
28

Podpis java.util.Collections.max wygląda następująco:<T rozszerza Object & E> vs <T extends E>

public static < T rozszerza Object & Porównywalne <? super T >> T max (kolekcja kolekcji);

Z tego co rozumiem, to w zasadzie oznacza, że ​​muszą T być zarówno java.lang.Object i java.lang.Comparable<? super T>>,

Jednakże, ponieważ każdy java.lang.Comparable jest również java.lang.Object, jaka jest różnica między podpisaniem wyżej i ten poniżej ? :

public static < T przedłuża Porównywalne <? super T >> T max (kolekcja kolekcji);

Odpowiedz

28

Aby zachować binarną kompatybilność: To kompletnie opisane here. Drugi podpis faktycznie zmienia typ zwrotu metody na Comparable i traci ogólność zwracania Object. Oryginalny podpis zachowuje oba.

+0

Dzięki za link =) Btw znasz jakieś narzędzia do sprawdzania skasowanych sygnatur po kompilacji? – Pacerier

+0

Nie to, co wiem, ale może [to] (http://blog.xebia.com/2009/03/12/a-general-purpose-utility-to-retrieve-java-generic-type-values/) może dać pewne wskazówki na ten temat. Sugeruję również przeczytanie sekcji "Typ Erasure" w FAQ Generycznych Angeliki Langer. – nobeh

+0

OK dzięki za pomoc =) – Pacerier

Powiązane problemy