私はこのようなことをしようとしています:-
public static ArrayList<myObject>[] a = new ArrayList<myObject>[2];
myObjectはクラスです。このエラーが表示されます:-汎用配列の作成(矢印は新規を指しています。)
ジェネリッククラスの配列を持つことはできません。 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);
Listを使用するよりも簡単に汎用配列を作成できます。
はじめに
public static ArrayList<myObject>[] a = new ArrayList[2];
次に初期化する
for(int i = 0; i < a.length; i++) {
a[i] = new ArrayList<myObject>();
}
できるよ
public static ArrayList<myObject>[] a = (ArrayList<myObject>[])new ArrayList<?>[2];
または
public static ArrayList<myObject>[] a = (ArrayList<myObject>[])new ArrayList[2];
(前者のほうがおそらく良いでしょう。)両方とも未チェックの警告を引き起こします。これは、@ SuppressWarnings( "unchecked")を使用することで無視または抑制できます。