java - 在这种情况下递归类型绑定(bind)有什么用

标签 java generics

我有以下代码

public static <T extends Comparable<T>> T max(List<T> list){
    Iterator<T> iter = list.iterator();
    ...
    // code for finding the max element in the list
    ...
 }

我的问题是,在这种情况下需要什么递归类型绑定(bind)?据我了解,T extends Comparable < T >意味着,T只能与 T 进行比较本身。这是因为,Class 'T' implements Comparable<T>所以,

class MyClass implements Comparable<MyClass>{
}

如果我的理解有误,欢迎指正。

现在真正的疑问是,为什么我们需要指定 < T extends Comparable < T > > ?无论如何,争论List<T>列表将包含相同类型的元素。即,假设我传递 List < MyClass2 > 类型的参数,那么所有元素都将具有相同类型,即 MyClass2 ..

那么递归类型绑定(bind)的含义是什么? 提前致谢。

最佳答案

为什么需要指定<T extends Comparable<T>> ?因为 Comparable 不要求实现类与其自身进行比较。理论上你可以写类似的东西

class Circle extends Shape implements Comparable<Integer> {
    ...
}

由于 Comparable 本身没有做出这样的限制,所以在编写函数时您必须自己做。但是,给定的界限比您需要的限制更多。您可以调用电话

public static <T extends Comparable<? super T>> T max(List<T> list) {
    ...
}

这意味着 T与它自身的某个父类(super class)相当。 rgettman 的 Fruit 示例中给出了您想要这样做的原因。 T仍然始终与其自身进行比较,但是不必相对于 T 来定义可比较对象。本身。

关于java - 在这种情况下递归类型绑定(bind)有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16548802/

相关文章:

java - 遍历 java 中的通用 HashMap

java - 什么时候实现 Comparable<super class of X> 而不是 Comparable<X>?

通过 Sockets 的 Java 文件传输修剪最后字节

java - 绑定(bind)spring mvc命令对象时如何将多个参数名映射到POJO

java - 如何在 Java 中启用禁用的 JSP 按钮?

java - Spring Boot Rest API 安全性

generics - 为什么以下通用约束会产生编译器错误?

java - 划分资源和用户

具有多个类类型的单个参数的 Java 泛型通配符

c# - 为 Unity 构造函数注入(inject)配置封闭泛型类型