我试图证明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);
没有错误,没有警告。