【发布时间】:2017-03-25 14:43:17
【问题描述】:
这两个签名有实际区别吗:
public static <T extends Comparable<? super T>> T max(Collection<T> c)
和
public static <T extends Comparable<T>> T max(Collection<? extends T> c)
我想不出这两个不能互换的单一用例。
那么两者兼有的原因是什么?超级T和?在 Java 集合中的标准 max() 方法中扩展 T:
public static <T extends Comparable<? super T>> T max(Collection<? extends T> coll)
编辑:
这个问题不是关于<? super T> 和<? extends T> 之间的区别。 get/put 原则对我来说很清楚。
问题在于这两个特定签名之间的区别以及为什么 Java Collections API 的创建者决定为他们的标准“max”函数创建这两个签名的混合体。
【问题讨论】:
-
一个更有趣的问题是,标准 max() 方法的参数中的
Collection<? extends T> coll与声明为Collection<T> coll是否有任何区别