Java为什么在本例中使用有界通配符?
我正在为我的一个班级参加一个实践考试,我遇到了一个问题,要求我实现一个静态泛型方法。对于方法的主体,我是正确的,但是对于实际的方法签名,我的猜测是不同的 我猜:Java为什么在本例中使用有界通配符?,java,generics,Java,Generics,我正在为我的一个班级参加一个实践考试,我遇到了一个问题,要求我实现一个静态泛型方法。对于方法的主体,我是正确的,但是对于实际的方法签名,我的猜测是不同的 我猜: public static <T> boolean isSorted(T[] array, Comparator<T> cmp){ ... publicstaticbooleanissorted(T[]数组,比较器cmp){。。。 然而,实践考试的答案使用了如下有界通配符: public static <
public static <T> boolean isSorted(T[] array, Comparator<T> cmp){ ...
publicstaticbooleanissorted(T[]数组,比较器cmp){。。。
然而,实践考试的答案使用了如下有界通配符:
public static <T> boolean isSorted(T[] a, Comparator<? super T> cmp)
公共静态布尔值排序(T[]比较器在Java中,子类的行为应该像基类一样,并可能扩展行为-例如,使用您建议的签名,Integer
数组只能与处理Integer
的比较器进行检查,而不能由处理Number
的比较器进行检查le.这个下限只扩大了该方法的可能用例,因为它扩展了可重用的比较器对象的数量。另一种说法是“如果我有一个比较器可以对任何数字进行排序,我当然应该能够比较整数,所以它应该是一个有效的第二个参数进行排序”。这花了我一点时间来思考,但这很有意义。谢谢你为我澄清这一点!“仅由一个处理数字的比较器来解释”,虽然在这种情况下是这样的,因为整数数组就是数字数组。请看这篇文章:。然后了解PECS(生产者扩展消费者超级)。