我有以下代码
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/