Collections.max()

时间:2018-07-08 08:28:45

标签: java generics bounded-wildcard

我试图了解泛型在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>>

    • 该方法期望TObject的子类,并且应该实现Comparable接口以比较集合中的元素。
    • (a)集合始终存储有类型的对象,这些对象无论如何都是Object的子类型。 T extends Object在这种情况下是否多余?
    • (b)Comparable<T>还不够?为什么我们需要Comparable<? super T>
  • max(Collection<? extends T> coll)

    • (c)我的再次怀疑是,为什么需要Collection<? extends T>?可以是Collection<T>吗?

0 个答案:

没有答案