我正在阅读有关泛型方法的内容,但是我感到困惑。让我先在这里陈述问题:
在这个例子中:假设我需要一个适用于任何类型T的selectionSort版本,通过使用由调用者提供的外部可比较性。
第一次尝试:
public static <T> void selectionSort(T[] arr, Comparator<T> myComparator){....}
假设我已经完成以下步骤:
- 定义了车辆类
- 创建了实现比较器的VehicleComparator,以价格作为车辆之间的比较依据。
- 创建了卡车类(Truck),继承自车辆类。
- 实例化了Truck[] arr;VehicleComparator myComparator。
selectionSort(arr, myComparator);
但这样做是不行的,因为myComparator对于Vehicle的任何子类都不可用。
那么,我接着做了这个:
public static <T> void selectionSort(T[] arr, Comparator<? super T> myComparator){....}
这个声明可以工作,但我不完全确定自己在做什么... 我知道使用 是正确的方法。如果"? super T"意味着 "T的未知超类型",那么我是强制要求上限还是下限?为什么是super?我的意图是让任何T的子类使用myComparator,为什么要用"? super T"。非常困惑... 如果您有任何深入见解,我将不胜感激。
提前感谢!
extends
,Consumersuper
)。用extends
来生产类,并用super
来消费类。 - KrishPrabakarmyComparator
确实比较Vehicle
。而且Truck[]
是Vehicle[]
的子类。 - newacct