gpt4 book ai didi

java - 为什么是 SomeClass 不等同于 Java 泛型类型中的 SomeClass

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:03 27 4
gpt4 key购买 nike

我注意到 Collections.sort 的规范:

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

为什么这里需要“? super”?如果ClassB延伸ClassA ,那么我们不能保证 Comparator<ClassA>将能够比较两个 ClassB无论如何,没有“? super”部分的对象?

换句话说,给定这段代码:

List<ClassB> list = . . . ;
Comparator<ClassA> comp = . . . ;
Collections.sort(list, comp);

为什么编译器不够聪明,即使没有为 Collections.sort() 的声明指定“? super”,也无法知道这是可以的?

最佳答案

Josh Bloch 今年在 Google I/O 上做了一次演讲,题目是 Effective Java Reloaded ,您可能会觉得有趣。它讲了一个叫“Pecs”的助记符(producer extends,consumer super),这就解释了为什么要用?扩展 T? super T 在您的输入参数中(仅;从不用于返回类型),以及何时使用 which。

关于java - 为什么是 SomeClass<? super T> 不等同于 Java 泛型类型中的 SomeClass<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/251298/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com