java - Collections.sort 通用方法签名
问题描述
在 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
。也就是说,如果一个比较器是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>
,上面的代码将无法编译。
推荐阅读
- laravel - 在 laravel 中显示所有具有类别的产品
- r - 在 R 中使用 coord_sf 在地图轴上显示度数
- python - Django for 循环保存实例
- powershell - 在 SCVMM 中的多个服务器上创建检查点的脚本
- python - 在 Python 中抓取时如何指定我需要的标签?
- windows - 如何在使用 TASKKILL /f /t /im explorer.exe 时保持批处理文件运行?
- screenshot - 虚幻引擎 4 游戏内截图
- html - 为什么我的课程不能 100% 填满屏幕?
- php - 如何防止用户使用用户 session_destroy 访问管理页面
- regex - 正则表达式缺少匹配项 - C++