为什么Collections.max()中的生成器是有界通配符?

时间:2014-08-18 16:15:33

标签: java generics collections wildcard

我试图证明Collections.max声明中的每个片段都是实现最大灵活性所必需的。

在什么情况下,必须绑定Collection通配符?(签名简化)

public <T extends Comparable<? super T>> T max(Collection<? extends T> coll)

public <T extends Comparable<? super T>> T max(Collection<T> coll)

我知道PECS规则,但我能想到的每个例子与第二个声明的作用相同,我正在寻找证明第二个extends我必要的例子。

有人提出了max()必须接受Collection<? extends Something>的答案,但即使没有可疑的约束也是如此:

public static class Animal implements Comparable<Animal> {

从响应中创建集合并将其传递给extends - 更少方法:

public static <T extends Comparable<? super T>> T max(Collection<T> coll) {...}
...
Collection<? extends Animal> someAnimalCollection = new ArrayList<Animal>();
Animal u = max(someAnimalCollection);

没有错误,没有警告。

0 个答案:

没有答案