0

重複の可能性:
Java 1.6:List<T>の配列の作成

この配列をJavaで初期化するにはどうすればよいですか。

Vector<Integer>[] c;

私はすでに試しています:

Vector<Vector<Integer>[]> a = new Vector<Vector<Integer>[]>();
Vector<Integer>[] c = (Vector<Integer>[])a.toArray();

次のエラーが発生します。

スレッド"main"の例外java.lang.ClassCastException:[Ljava.lang.Object; [Ljava.util.Vector;にキャストできません。at app.Program.main(Program.java:38)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:43)at java.lang.reflect.Method.invoke(Method.java:601)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

編集:

私の問題は、私がジェネリック配列 "T [] args"引数を受け取るクラスのクライアントであり、私の場合、TはVector、Thanksなどのジェネリック型であるということです。

私はJavaを初めて使用します。

4

4 に答える 4

4

ジェネリックの配列を作成できるとは思いません。これをチェックしてください。Java 1.6:List<T>の配列の作成

これは、タイプ情報が実行時に利用できないためです。

于 2013-01-09T14:55:07.867 に答える
2

あなたがそれを避けることができれば、私はVectorを使用しません。Java 1.2(1998)ではArrayListに置き換えられました。

List<List<Integer>[]> a = new ArrayList<List<Integer>[]>();
List<Integer>[] c = (List<Integer>[]) a.toArray(new List[a.size()]);

toArray()Object[]特定の配列型にダウンキャストできないaのみを返します。

ところで、効率が問題になる場合は、コレクションで整数を使用しないようにします。代わりにtroveを使用できます。TIntArrayListのラッパーですint[]

List<TIntArrayList> a = new ArrayList<>();
TIntArrayList[] c = a.toArray(new TIntArrayList[a.size()]);
于 2013-01-09T14:56:09.290 に答える
1

これはベクトルの配列です:

    Vector<Integer>[] c = new Vector[2];
    c[0] = new Vector<Integer>();
    c[0] = new Vector<Object>(); // <- compiletime error
    c[0].add(new Integer(0));

「ジェネリック配列」を作成することはできません。ただし、上の行は、最大サイズのベクトルを保持する配列を作成します。また、各配列スロットは、パラメータ化されたへの参照を保持できますVector

配列自体がジェネリックではない場合でも、変数cがジェネリック型として宣言されているためVector<Integer>、インスタンスを配列に配置するだけで済みます。

したがって、いくつかの警告を無視すれば、配列に他のベクトルを追加できます...

    Vector[] b = c;                    // <- warning
    Vector<Double>[] a = b;            // <- warning
    a[1] = new Vector<Double>();       // <- the array itself allows that
    a[1].add(new Double(0));

    for (Vector<Integer> vector : c) {
        Integer value = vector.get(0); // <- BOOM! (on second iteration)
    }
于 2013-01-09T14:57:13.957 に答える
1

ジェネリック宣言を削除することもできます

Vector[] c = new Vector[10];

または、配列を別のベクトルまたはリストタイプに置き換えます

List<Vector<Integer>> list = new ArrayList<Vector<Integer>>();
于 2013-01-09T15:00:30.060 に答える