所以我正在阅读通用方法,我很困惑。我先在这里说明问题:
在此示例中:假设我需要一个适用于任何类型 T 的 selectionSort 版本,方法是使用调用者提供的外部可比较。
第一次尝试:
public static <T> void selectionSort(T[] arr, Comparator<T> myComparator){....}
假设我有:
- 定义的车辆类别
- 创建了实现 Comparator 的 VehicleComparator,同时按价格比较车辆。
- 创建卡车扩展车辆
- 实例化 Truck[] arr ; 车辆比较器 myComparator
现在,我这样做:
selectionSort(arr, myComparator);
并且它不起作用,因为 myComparator 不适用于任何 Vehicle 子类。
然后,我这样做:
public static <T> void selectionSort(T[] arr, Comparator<? super T> myComparator){....}
这个声明会起作用,但我不完全确定我一直在做什么......我知道使用是要走的路。如果“?super T”的意思是“T的未知超类型”,那么我是在施加上限还是下限?为什么超级棒?我的意图是让 T 的任何子类使用 myComparator,为什么是“?super T”。如此困惑...如果您对此有任何见解,我将不胜感激。
提前谢谢!