我正在参加我的一个课程的练习考试,我遇到了一个问题,要求我实现一个静态泛型方法.我对方法的主体是正确的,但我对实际方法签名的猜测是不同的.
我猜的:
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,即使我知道这意味着什么(super在T你指定的那个类型的类层次结构中以向上包容的方式限制),我不认为我完全理解你为什么要使用有界通配符像这样.
提前致谢.
在Java中,子类应该像基类一样行为并且可能扩展行为 - 使用您提出的签名,Integer例如,只能根据Comparator工作Integer而不是通过Comparator工作来检查数组Number.该下限仅扩展了该方法的可能用例,因为它扩展了可能的Comparator对象数量以供重用.
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |