10

私は定義しましたList<Integer> stack = new ArrayList<Integer>();

次の方法で配列に変換しようとしている場合:

Integer[] array= stack.toArray();

この例外が発生します:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Type mismatch: cannot convert from Object[] to Integer[].

なんで?これはまったく同じタイプです-整数から整数。クラスが父と息子の関係であるこの一般的なケースのようではありません

私はキャスティングをしようとしました:

    Integer[] array= (Integer[]) stack.toArray();

しかし、ここで私はこのエラーを受け取ります:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

何が問題ですか?

4

3 に答える 3

13

型消去のため、ArrayListは実行時にそのジェネリック型を認識しないため、最も一般的なObject[]しか提供できません。必要な配列のタイプを指定できる他のtoArrayメソッドを使用する必要があります。

Integer[] array= stack.toArray(new Integer[stack.size()]);
于 2011-09-02T09:54:45.373 に答える
2

それを行う方法はこれです:

Integer[] array = stack.toArray(new Integer[stack.size()]);

ちなみに、コードがコンパイルされない理由は、型消去だけではありません。問題は、をList<T>.toArray()返すことObject[]であり、ジェネリックが導入される前にこれを実行していました。

于 2011-09-02T09:55:39.360 に答える
1

代わりにこれを行ってください:

Integer[] array = stack.toArray(new Integer[stack.size()]);

「シード」配列を引数としてtoArrayメソッドに渡す必要があります。

于 2011-09-02T09:55:00.070 に答える