2017-01-09 10 views
-1

私はリストの配列を渡す必要がある仕様があります。Java:リストの配列<MyClass>

List<MyClass> [] data = new ArrayList[2]; 
data[0] = new ArrayList<MyClass>(); 
data[1] = new ArrayList<MyClass>(); 

コンパイルが、警告を与える:私は、ジェネリック医薬品の配列はJavaで許可されていないことを

uses unchecked or unsafe operations. 

理解しかし、私は変更することはできません配列が、私はこれを達成するために、次を使用しています常に長さ2です。仕様と上記のコードはうまく動作しているようです。私が配列の要素をタイプArrayList<MyClass>以外のものにすることを決して意識していない限り、私はこの警告を抑制して自分のやり方にするべきではないという理由は何ですか?

+1

リストリストを使用することをお勧めします。リスト<リスト> –

+2

[汎用アレイを作成できません。](https://docs.oracle.com/javase/tutorial/java/generics/restrictions。 html#createArrays) – shmosel

+1

可能性のある[this]の複製(0120) –

答えて

3

あなたのコードでは、あなたのコードがあなたの配列にどのタイプの値を追加しているかをチェックするつもりはないことを警告します。 ArrayList <MyClass>タイプのみがアレイに追加されていることを確認している限り、この警告は無視できます。

@SuppressWarnings( "未チェック")がJavaの理由で存在するため、警告を抑制し、コンパイラにタイプチェックが必要ないことを知らせることができます。

0

Javaが汎用アレイの作成を許可していないので、警告を表示しないようにしてください。 安全ではありませんが、その警告を無視または抑制しない限り、ジェネリックで配列を作成する方法は他にありません。

+2

Javaはそれを許可していません。なぜあなたは無視するのが安全だと思いますか? – shmosel

+0

要素0と1を明示的に 'ArrayList '型のオブジェクトに設定しています。 Javaは、それも理由のためにコンパイルすることができます。 – thedarklord47

+0

@ thedarklord47主にプリジェネリックアレイとの下位互換性のためです。いずれにしても、私はそれが決して受け入れられないとは言わず、必ずしも安全であるとは限りません。 – shmosel

0

汎用アレイは作成できません。 official Java documentation on the subjectを参照してください。

あなたはまだもちろんそう...

List[] data = new List[2]; 

のように、これはあなたが/から出てくるしに行くすべての種類を確認する必要があることを意味し、コンパイル時の警告を取り除くことができますデータの参照を開始するときに一覧表示します。&は適切にキャストします。だから気をつけてください。

関連する問題