我正在参加我的一门类(class)的练习考试,我遇到了一个问题,要求我实现一个静态泛型方法。我对方法主体的猜测是正确的,但我对实际方法签名的猜测是不同的。
我猜:
public static <T> boolean isSorted(T[] array, Comparator<T> cmp){ ...
然而,练习考试的答案使用了这样的有界通配符:
public static <T> boolean isSorted(T[] a, Comparator<? super T> cmp)
我再次通读了 javadoc,尽管我知道这意味着什么(super
在类层次结构中以向上包容的方式限制您指定的类型 T
),我不认为我完全理解为什么您想要像这样使用有界通配符。
提前致谢。
最佳答案
在 Java 中,子类的行为应该像基类一样,并且可能扩展行为 - 使用您建议的签名,Integer
的数组例如只能根据 Comparator
检查正在研究 Integer
只有而不是 Comparator
正在研究 Number
, 例如。这个下限只会扩大该方法的可能用例,因为它扩展了可能的数量 Comparator
重复使用的对象。
关于Java 为什么在此示例中使用有界通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24054705/