Просто прошел через реализацию класса Java 7 java.util.Collections
и увидел что-то, чего я не понимаю. В сигнатуре функции max
, почему T
ограничен Object
?
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
, кажется, работает нормально, если граница Object опущена.
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;
}
Существуют ли в действительности ситуации, когда граница имеет значение? Если да, укажите конкретный пример.