Ho appena eseguito l'implementazione della classe java.util.Collections
di Java 7 e ho visto qualcosa che non capisco. Nella firma della funzione max
, perché T
è limitato da Object
?Perché T è limitato da Object nella firma Collections.max()?
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) {
Iterator<? extends T> i = coll.iterator();
T candidate = i.next();
while (i.hasNext()) {
T next = i.next();
if (next.compareTo(candidate) > 0)
candidate = next;
}
return candidate;
}
max
sembra funzionare correttamente se il limite dell'oggetto viene omesso.
public static <T extends Comparable<? super T>> T max(Collection<? extends T> coll) {
Iterator<? extends T> i = coll.iterator();
T candidate = i.next();
while (i.hasNext()) {
T next = i.next();
if (next.compareTo(candidate) > 0)
candidate = next;
}
return candidate;
}
Esistono effettivamente situazioni in cui il limite fa la differenza? In caso affermativo, fornire un esempio concreto.
duplicato del [ vs ] (http://stackoverflow.com/questions/10339338/t-extends-object-e-vs-t-extends-e), anche se questo post ha sia una migliore domanda che una risposta. –