为什么是SomeClass <?超级T>不等于Java泛型类型中的SomeClass <T>吗?

基普

我注意到了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()的声明指定“ ”,编译器也不足够聪明地知道这是可以的

克里斯·杰斯特·杨(Chris Jester-Young):

Josh Bloch今年在Google I / O上做了一个名为“ 有效Java重新加载”的演讲,您可能会发现它很有趣。它讨论了一个称为“ Pecs”(生产者extends,消费者super的助记符,该助记符解释了为什么在输入参数中使用? extends T? super T输入参数(仅;从不用于返回类型),以及何时使用该参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java 中的泛型 - 为什么我不能做 Comparable<? 扩展 T> 而不是 Comparable<? 超级T>?

为什么是谓“?超级SomeClass的>不适用对象?

T扩展SomeClass的意义是什么?

什么是<?超级T>语法?

java.util.Comparator.naturalOrder采用<T扩展Comparable <?超级T >>并返回Comparator <T>-为什么?

可以将SomeClass <T>转换为SomeClass <object>,直到运行时T才是“未知”的吗?

无法获得泛型ResponseEntity <T>,其中T是泛型类“ SomeClass <SomeGenericType>”

为什么是T?不是可以为空的类型吗?

爪哇?收藏中的超级 T 复制为什么正确工作

为什么`std::set<T>::end()` 不等于`std::set<T>::iterator{}`?

为什么Java的Class <T>是泛型的?

java泛型T扩展了Simpletype吗?

Java泛型<?超级T>:不适用的方法

为什么numeric_limits <uint16_t> :: max()不等于-1?

为什么T扩展可比性<?超级T>包括T?含义包括Comparable <T>?

为什么这是假的?SomeClass.method是SomeClass.method

Scala类型:A类不等于T,其中T是:类型T = A

之间的区别?超级T>和<?在Java中扩展T>

参数的类型要传递给<?超级T>在Java中

为什么子类型不能分配给 Dart 中的 <T extends baseclass> 泛型

类型不匹配:无法从Comparator <capture#2-of?超级T>到Comparator <?超级T>

什么是通用的<一个真实生活中的例子?超级T>?

Java Comparator类中的泛型。T和U的确切类型是什么?

具有缩放t分布的GAMM:为什么我的残差和拟合值不等于观测值?

Java泛型,<C>是否等于<T>?

在 TS 泛型中,为什么 T != { foo: T['foo'] } & Omit<T, 'foo'>?

为什么Variable <T>的泛型类型参数必须与设置它的相应OutArgument <T>完全匹配?

为什么调用使用 Span<T> 和 T[] 的泛型方法不能推断类型参数?

Java:如何在SomeClass <T>中为“ T”设置默认值?