我正在参加我的一个课程的练习考试,我遇到了一个问题,要求我实现一个静态泛型方法.我对方法的主体是正确的,但我对实际方法签名的猜测是不同的.
我猜的:
public static boolean isSorted(T[] array, Comparator cmp){ ...
但是,练习考试的答案使用了这样的有界通配符:
public static boolean isSorted(T[] a, Comparator super T> cmp)
我再次阅读了javadoc,即使我知道这意味着什么(超级是在你指定的类型T的类层次结构中以向上包容的方式限制),我不认为我完全理解你为什么要使用一个像这样的有界通配符.
提前致谢.
解决方法:
在Java中,子类应该像基类一样运行并且可能扩展行为 – 使用您提出的签名,例如,只能对仅使用Integer的Comparator检查Integer数组,而不能通过处理Number的Comparator检查.此下限仅扩展了该方法的可能用例,因为它扩展了可能的Comparator对象的数量以供重用.
标签:java,generics
来源: https://codeday.me/bug/20190528/1173747.html