为什么SomeClass 不等于SomeClass 在Java通用类型中?

我注意到了Collections.sort的规格:

public static <T> void sort(List<T> list, Comparator<? super T> c)

为什么? super这里需要“ ”?如果是ClassBextend 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

回到顶部