web-dev-qa-db-ja.com

汎用配列作成エラー

私はこのようなことをしようとしています:-

public static ArrayList<myObject>[] a = new ArrayList<myObject>[2];

myObjectはクラスです。このエラーが表示されます:-汎用配列の作成(矢印は新規を指しています。)

41
Harshveer Singh

ジェネリッククラスの配列を持つことはできません。 Javaは単にサポートしていません。

配列の代わりにコレクションの使用を検討する必要があります。例えば、

public static ArrayList<List<MyObject>> a = new ArrayList<List<MyObject>();

別の「回避策」は、このような補助クラスを作成することです

class MyObjectArrayList extends ArrayList<MyObject> { }

MyObjectArrayListの配列を作成します。


これが言語で許可されていない理由に関する 良い記事 です。この記事では、許可された場合に発生する可能性のある次の例を示します。

List<String>[] lsa = new List<String>[10]; // illegal
Object[] oa = lsa;  // OK because List<String> is a subtype of Object
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
oa[0] = li; 
String s = lsa[0].get(0); 
52
aioobe

Listを使用するよりも簡単に汎用配列を作成できます。

はじめに

public static ArrayList<myObject>[] a = new ArrayList[2];

次に初期化する

for(int i = 0; i < a.length; i++) {
     a[i] = new ArrayList<myObject>();
}
9
Strin

できるよ

public static ArrayList<myObject>[] a = (ArrayList<myObject>[])new ArrayList<?>[2];

または

public static ArrayList<myObject>[] a = (ArrayList<myObject>[])new ArrayList[2];

(前者のほうがおそらく良いでしょう。)両方とも未チェックの警告を引き起こします。これは、@ SuppressWarnings( "unchecked")を使用することで無視または抑制できます。

5
newacct