どのような違いがある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