首页 > 解决方案 > Collections.sort 通用方法签名

问题描述

在 java.util.Collections 我们有下面的方法签名

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

我不明白为什么要指定

Comparator<? super T>

代替

Comparator<T>

它涵盖了哪些用例?

标签: javagenericsbounded-wildcard

解决方案


这是一个例子:

class Person {}

class Student extends Person {}

? super T手段?是 的超类(或接口)T。也就是说,如果一个比较器是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>,上面的代码将无法编译。


推荐阅读