Java 为什么在此示例中使用有界通配符?

标签 java generics

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

我猜:

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

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

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

我再次通读了 javadoc,尽管我知道这意味着什么(super 在类层次结构中以向上包容的方式限制您指定的类型 T ),我不认为我完全理解为什么您想要像这样使用有界通配符。

提前致谢。

最佳答案

在 Java 中,子类的行为应该像基类一样,并且可能扩展行为 - 使用您建议的签名,Integer 的数组例如只能根据 Comparator 检查正在研究 Integer只有而不是 Comparator正在研究 Number , 例如。这个下限只会扩大该方法的可能用例,因为它扩展了可能的数量 Comparator重复使用的对象。

关于Java 为什么在此示例中使用有界通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24054705/

相关文章:

swift - 如何声明一个返回可迭代对象的函数

arrays - 遍历任何类型的数组

java - 使用 Java 的 Angular 应用程序

java - 构建泛型类

java - 将 TDD 应用于 XML 解析器项目时遇到问题

java - Netbeans 与 MySql - 数据库无法与其他计算机一起使用

c# - 如何在 C# 中查找通用控件的标记

Java 泛型 : capture cannot be applied to Object

java - 没有锁,是否可以快速解决多线程银行帐户问题?

java - 减去两次后 TextView 上没有任何显示(hh :mm:ss)