1. ホーム
  2. java

[解決済み] [Solved] Difference between List, List<?>, List<T>, List<E>, and List<Object>

2022-04-14 23:45:27

Question

What are the differences between List , List<?> , List<T> , List<E> , and List<Object> ?

1. List

List : is a raw type, therefore not typesafe . It will only generate a runtime error when the casting is bad. We want a compile time error when the cast is bad. Not recommended to use.

2. List<?>

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. リスト<オブジェクト>

これは、エラー "メソッドを提供します。 test(List<Object>) は、引数 List<String> となります。

public static void test(List<Object> list){
    System.out.println(list);
}

もしこれを試すと、"Cannot cast from List<String> から List<Object> となります。

test((List<Object>) names);

混乱しています。 String のサブクラスです。 Object であるならば、なぜ List<String> のサブクラスです。 List<Object> ?

解決方法は?

1) 正解

2) これは、アイテムの型を気にしない、読み取り専用のリストと考えることができます。

3) T, E, U は同じですが、例えば、T はタイプ、E は要素、V は値、K はキーとして使われることが多いようです。コンパイルするメソッドは、ある型の配列を受け取り、同じ型の配列を返すと言うものです。

4) オレンジとリンゴを混ぜることはできない。オブジェクトのリストを期待するメソッドに文字列リストを渡すことができれば、文字列リストにオブジェクトを追加することができます。(そして、すべてのオブジェクトが文字列であるわけではありません)。