このコードがエラーになるのはなぜですか?
List<String>[] l = new ArrayList<String>[10];
Eclipse は汎用配列を作成できないと言っていましたが、実際にはコレクション配列を作成しようとしています。
コレクションとは関係ありません。(生の)配列コンストラクターは、パラメーター化された型を取ることはできません。
試す
List[] l = new ArrayList[10];
(@newacctに感謝)
このようにしてみてください
List<String>[] al = new ArrayList[10];
al[0] = new ArrayList<String>();
al[1] = new ArrayList<Date>(); // Give u error because List accepts only String
次のようにしてみてください: List[] l = new List[10]; 次に、ArrayList(s) を List の配列に追加します...単純な配列は、ジェネリック情報を保持できません。ジェネリックよりずっと前に言語に含まれていました...
言語仕様によると、セクション15.10 :
「配列作成式は、要素が PrimitiveType または ClassOrInterfaceType によって指定された型である新しい配列であるオブジェクトを作成します。ClassOrInterfaceType が具体化可能な型を示さない場合、コンパイル時エラーになります。」
そして、言語仕様、セクション 4.7ごとに:
一部の型情報はコンパイル中に消去されるため、実行時にすべての型が使用できるわけではありません。実行時に完全に利用できる型は、具体化可能な型と呼ばれます。
次のいずれかが成り立つ場合に限り、型は具体化可能です。
- 非ジェネリック クラスまたはインターフェイス型の宣言を参照しています。
...
簡単に言えば、「言語ができないと言っているから」です。下位互換性を維持するための最終的な原因は理解していますが、詳細については詳しくありません。