という事は承知しています
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 が ClassC ではなく ClassB であることをどのように推測しますか? また、ClassB を推論できない場合 (実際には ClassC を推論する場合)、次のメソッド シグネチャ ("List" なし) は同等ではないでしょうか?
public static <T extends Object & Comparable<? super T>> T findMax(List<T> myList, int begin, int end){
ありがとう、ジャック