我正在参加我的一个课程的练习考试,我遇到了一个问题,要求我实现静态通用方法。我对方法的主体是正确的,但我对实际方法签名的猜测是不同的。
我猜到了:public static <T> boolean isSorted(T[] array, Comparator<T> cmp){ ...
但是,练习考试的答案使用了这样的有界通配符:
public static <T> boolean isSorted(T[] a, Comparator<? super T> cmp)
我再次阅读了javadoc,即使我知道这意味着什么(super
在你指定的那种类型T
的类层次结构中以向上包容的方式进行限制,但我不知道我想我完全理解为什么你想要使用这样的有界通配符。
提前致谢。
答案 0 :(得分:6)
在Java中,子类应该像基类一样,并且可能扩展行为 - 使用您提出的签名,例如Integer
的数组只能针对{{1}进行检查例如,仅在Comparator
上工作,而不是Integer
工作Comparator
。此下限仅扩展了该方法的可能用例,因为它扩展了可能的Number
对象的数量以供重用。