このコードはなぜエラーになりますか?ジェネリックコレクションアレイをインスタンス化する方法は?
List<String>[] l = new ArrayList<String>[10];
Eclipseでは、汎用アレイを作成できないと言っていますが、実際はコレクション配列を作成しようとしています。
このコードはなぜエラーになりますか?ジェネリックコレクションアレイをインスタンス化する方法は?
List<String>[] l = new ArrayList<String>[10];
Eclipseでは、汎用アレイを作成できないと言っていますが、実際はコレクション配列を作成しようとしています。
「は、配列生成式は、要素なPrimitiveTypeかによって指定された型である新しい配列があるオブジェクトを作成しますClassOrInterfaceType。ClassOrInterfaceTypeが元の型を示さない場合、コンパイル時エラーです。 "
そしてlanguage spec, section 4.7あたり:
いくつかの種類の情報がコンパイル時に消去されますので、必ずしもすべての種類は、実行時に利用できます。実行時に完全に使用可能な型は、reifiable型と呼ばれます。
- 、非ジェネリッククラスまたはインタフェース型宣言を指す:
型は、以下のいずれかが成立する場合にのみreifiableあります。
...
"言語は、あなたができないと言うので、" だから、簡単に言えば。下位互換性を維持するための最終的な原因を理解していますが、詳細についてはよく分かりません。
ありがとう – gaoshougaoshou
これはコレクションには関係ありません。 (生の)配列コンストラクタはパラメータ化された型を取ることができません。
試し
List[] l = new ArrayList[10];
(ありがとう@newacct)
そこに行く!私の愚かなコメントよりもはるかに良い。 –
パラメータ化された型の配列は、有効な*型*です(例えば、リスト
このようにそれを試してみてください:リスト[] L =新しいリスト[10]。 次に、リストの配列にArrayListを追加します。 単純な配列はジェネリックス情報を保持できません。それは...ジェネリック医薬品の前に長い言語に含まれていたパー
あなたは文字列のArrayListのを作るために探しているなら、あなたは)このArrayListの
List<String>[] al = new ArrayList[10];
al[0] = new ArrayList<String>();
al[1] = new ArrayList<Date>(); // Give u error because List accepts only String
のようにしてみてください。 –