0

まず第一に、私はJavaが初めてで、経験がほとんどありません。

クラスには、次の属性があります

private List<Arc> arcs[]; // an array of a List of type Arc

クラスのコンストラクターで、初期化しようとしています:

 @SuppressWarnings("unchecked")
 arcs = new List[500];

しかし、それはコンパイルされません。このタイプの配列を初期化する方法を理解しようとしてきましたが、理解できない Array.newinstance の使用を見ました。

ご協力いただきありがとうございます

解決:

arcs = 新しいリスト[500];

4

4 に答える 4

3

これを使って :

arcs = new List[500];

「リスタ」ではありません。

ここでの問題は単なるタイプミスではないかと思います...

于 2012-10-05T14:24:08.520 に答える
0

配列には、実行時にそのコンポーネント タイプに関する情報が含まれているため、必要なことを行うことはできません。ジェネリックにはありません。したがって、配列を作成するには、型を知っている必要があります。これは、この場合ジェネリックを使用できないことを意味します。

そのため、コードList<Arcs>[] arcsは有効であり、そうでnew ArrayList<Arcs>[500]はありません。

このようなことをしようとすると、同じエラーが発生します (T は一般的なものです)。

T[] genericArray = new T[];

コンパイラが失敗するエラーは次のとおりです。Cannot create a generic array

それを回避するには、次のようなものを作成できます。

List<Arcs>[] arcs = new ArrayList[500];

ただし、これはタイプ セーフではありません。タイプ セーブ ソリューションを使用するには、以下のコードを使用する必要があります。

List<List<Arcs>> lista = new ArrayList<List<Arcs>>();

于 2012-10-05T14:45:44.890 に答える
0

あなたはここで物事を混ぜているようです。

1 次元配列が必要な場合は、リストまたは配列を使用できますが、両方を使用することはできません。

    List<Arc> list = new ArrayList<Arc>();
    list.add(new Arc());

    Arc[] array = new array[1];
    array[0] = new Arc();

配列のリスト(2D構造)が本当に必要な場合を除きますが、そうではないようです。

編集

コメントに基づいて、次のようなリストの配列が必要です。

List<Arc>[] listOfArrays = new List[500]; //you can't easily mix arrays and generics
List<Arc> list = new ArrayList<Arc>();
list.add(new Arc());
listOfArrays[0] = list;

ps: リストのリストを使用することもできます:

List<List<Arc>> listOfLists = new ArrayList<List<Arc>>();
List<Arc> list = new ArrayList<Arc>();
list.add(new Arc());
listOfLists.add(list);
于 2012-10-05T14:25:08.360 に答える
0

理想的には、警告を回避するには、リストのリストを使用します

List< List<Arc>> arcLists = new ArrayList< List< Arc >>();

もちろん、Java 7 では、型推論を使用すると、おそらくもう少しきれいに見えるでしょう。

あなたが配列に夢中になっているなら、使用してください

arcs = (ArrayList<Arc>[]) new ArrayList[500];
于 2012-10-05T14:33:05.527 に答える