Java为什么在这个例子中使用有界通配符?

时间:2014-06-05 07:58:04

标签: java generics

我正在参加我的一个课程的练习考试,我遇到了一个问题,要求我实现静态通用方法。我对方法的主体是正确的,但我对实际方法签名的猜测是不同的。

我猜到了:

public static <T> boolean isSorted(T[] array, Comparator<T> cmp){ ...

但是,练习考试的答案使用了这样的有界通配符:

public static <T> boolean isSorted(T[] a, Comparator<? super T> cmp)

我再次阅读了javadoc,即使我知道这意味着什么(super在你指定的那种类型T的类层次结构中以向上包容的方式进行限制,但我不知道我想我完全理解为什么你想要使用这样的有界通配符。

提前致谢。

1 个答案:

答案 0 :(得分:6)

在Java中,子类应该像基类一样,并且可能扩展行为 - 使用您提出的签名,例如Integer的数组只能针对{{1}进行检查例如,仅在Comparator上工作,而不是Integer工作Comparator。此下限仅扩展了该方法的可能用例,因为它扩展了可能的Number对象的数量以供重用。