ここで質問です。この最初のコード リストは問題なくコンパイルされます (JDK 1.6 | JDK 1.7)。
ArrayList<String> a = new ArrayList<String>();
String[] s = a.toArray(new String[0]);
ただし、List
参照を生の型として宣言すると、次のようになります。
ArrayList a = new ArrayList();
String[] s = a.toArray(new String[0]);
String[]
が必要ですが、Object[]
見つかったというコンパイラ エラーが発生します。
これは、引数としてObject[]
a を受け取っているにもかかわらず、コンパイラがジェネリック メソッドを返すものとして解釈していることを意味します。String[]
toArray(myArray)
メソッドの署名を再確認しました。
<T> T[] toArray(T[] a);
したがって、型パラメーター<T>
が List の型パラメーター (つまり ) とはまったく関係のないパラメーター化されたメソッドです<E>
。
ここで生の型を使用すると、独立した型パラメーターを使用してパラメーター化されたメソッドの評価にどのように影響するかわかりません。
- このコードがコンパイルされない理由を知っている人はいますか?
- この動作が文書化されている参照を知っている人はいますか?