我试图了解泛型在Java中的工作方式。以下代码来自OpenJDK的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;
}
<T extends Object & Comparable<? super T>>
T
是Object
的子类,并且应该实现Comparable
接口以比较集合中的元素。 Object
的子类型。 T extends Object
在这种情况下是否多余?Comparable<T>
还不够?为什么我们需要Comparable<? super T>
? max(Collection<? extends T> coll)
Collection<? extends T>
?可以是Collection<T>
吗?