最佳答案
刚刚浏览了 Java7的 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;
}
如果省略 Object 绑定,max
似乎可以正常工作。
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;
}
实际上是否有任何情况下界限会产生影响? 如果是,请提供一个具体的例子。