Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java为什么在本例中使用有界通配符?_Java_Generics - Fatal编程技术网

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(生产者扩展消费者超级)。