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

Pau*_*ker 4 java generics

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

我猜的:

public static <T> boolean isSorted(T[] array, Comparator<T> cmp){ ...
Run Code Online (Sandbox Code Playgroud)

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

public static <T> boolean isSorted(T[] a, Comparator<? super T> cmp)
Run Code Online (Sandbox Code Playgroud)

我再次阅读javadoc,即使我知道这意味着什么(superT你指定的那个类型的类层次结构中以向上包容的方式限制),我不认为我完全理解你为什么要使用有界通配符像这样.

提前致谢.

Smu*_*tje 6

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