java - Collections.sort 泛型方法签名

标签 java generics bounded-wildcard

在 java.util.Collections 中,我们有以下方法签名

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

我不明白为什么要指定

Comparator<? super T>

而不是

Comparator<T>

它涵盖哪些用例?

最佳答案

这是一个例子:

class Person {}

class Student extends Person {}

? super T意味着?T 的父类(super class)(或接口(interface)) 。 也就是说,如果比较器是 Comparator<Person> ,自 Student继承自Person ,这个比较器应该仍然可以在 Student 上工作。 .

List<Student> students = ...
Collections.sort(students, new Comparator<Person>() {
    @Override
    public int compare(Person p1, Person p2) {
        // compare person
        return 0;
    }
});

如果我们改变Comparator<? super T>Comparator<T> ,上面的代码将无法编译。

关于java - Collections.sort 泛型方法签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51682419/

相关文章:

java - Java 中的通用链表克隆

java - 在 Guava 中,为什么在可能使用 "T"的地方只使用 "? super T"?

带有可选值的 Java 8 泛型集合

java JFrame 在由 actionPerformed 启动时将无法工作

Java TreeSet 的 contains 实现(源代码)缺失

java - Android:当我单击按钮时,它应该在 WebView 中播放视频

c# - 恢复一个 "lost"类型的参数

c# - 使用 Glass Mapper 在 Sitecore View 渲染中使用通用类型

具有下限类型的 Java 类型推断

java - 将对象列表转换为数组。获取 ArrayStoreException