我注意到了Collections.sort的规格:
public static <T> void sort(List<T> list, Comparator<? super T> c)
为什么? super
这里需要“ ”?如果是ClassB
extend ClassA
,那么我们是否不能保证a Comparator<ClassA>
仍然能够比较两个ClassB
对象而没有“ ? super
”部分?
换句话说,给出以下代码:
List<ClassB> list = . . . ;
Comparator<ClassA> comp = . . . ;
Collections.sort(list, comp);
为什么即使不? super
为Collections.sort()的声明指定“ ”,编译器也不足够聪明地知道这是可以的?
Josh Bloch今年在Google I / O上做了一个名为“ 有效Java重新加载”的演讲,您可能会发现它很有趣。它讨论了一个称为“ Pecs”(生产者extends
,消费者super
)的助记符,该助记符解释了为什么在输入参数中使用? extends T
和? super T
输入参数(仅;从不用于返回类型),以及何时使用该参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句