どのような違いがあるList、List<?>、List<T>、List<E>、とList<Object>?
1.リスト
List:は生の型なので、ではありませんtypesafe。キャストが悪い場合にのみランタイムエラーが発生します。キャストが悪いときにコンパイル時エラーが欲しい。使用はお勧めしません。
2.リスト<?>
List<?>無制限のワイルドカードです。しかし、それが何のためにあるのかわかりませんか?List<?>問題なく印刷できます:
public static void test(List<?> list){
System.out.println(list); // Works
}
にアイテムを追加できないのはなぜList<?>ですか?
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
3.リスト<T>
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
この構文が理解できません。私はこのようなものを見ました、そしてそれはうまくいきます:
public <T> T[] toArray(T[] a){
return a;
}
時々 、私は参照<T>、または<E>、または<U>、<T,E>。それらはすべて同じですか、それとも別のものを表していますか?
4. List <オブジェクト>
これにより、「メソッドtest(List<Object>)は引数に適用できません」というエラーが発生しますList<String>。
public static void test(List<Object> list){
System.out.println(list);
}
これを試してみると、「からキャストできません」を取得しList<String>ましたList<Object>:
test((List<Object>) names);
私は混乱しています。StringのサブクラスなObjectので、なぜList<String>のサブクラスではないのList<Object>ですか?
2。これをデモンストレーションするためのコードをいくつか書いています2。tyvm