为什么SomeClass 不等于SomeClass 在Java通用类型中?
我注意到了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参数(仅;从不用于返回类型),以及何时使用该参数。
以上是 为什么SomeClass 不等于SomeClass 在Java通用类型中? 的全部内容, 来源链接: utcz.com/qa/397572.html