在 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/