我明白那个
List<? extends T>
允许列表是 T(或 T 本身)的任何子类型,并且
List<T>
仅允许 T 类型的列表。但是,请查看以下方法签名:
public static <T extends Object & Comparable<? super T>> T findMax(List<? extends T> myList, int begin, int end){
以及以下课程:
public class ClassA{
}
public class ClassB extends ClassA implements Comparable<ClassA>{
public int compareTo(ClassA s){
//do comparison
}
}
public class ClassC extends ClassB{
}
假设 T 是 ClassB,我想为我的列表传递一个 T (ClassC) 的子类型:
public static void main(String[] args){
List<ClassC> myC = new ArrayList<ClassC>();
ClassC a = findMax(myC, 2, 3);
}
在这种情况下,java如何推断T是ClassB,而不是ClassC?如果它不能推断出 ClassB(实际上推断出 ClassC),那么下面的方法签名(没有“List”)不是等价的吗?
public static <T extends Object & Comparable<? super T>> T findMax(List<T> myList, int begin, int end){
谢谢,杰克