0

実行時例外java.lang.ClassCastingException--..。

Integer intArr[] = new Integer[arrList.size()];
ArrayList <Integer> arrList =new ArrayList();
intArr=(Integer[])arrList.toArray(); // returns Object class which is downcaste to Integer;

ダウンキャストは安全ではないことは理解していますが、なぜこれが発生するのですか?に変換しようとしArrayListましStringIntegerint、同じエラーが発生します。

4

4 に答える 4

5

これをやってみてください

intArr = arrList.toArray(new Integer[arrList.size()]);

取得するのは型付きInteger配列であり、オブジェクト配列ではありません。

于 2011-07-14T10:32:41.613 に答える
1

ここでの問題は、オブジェクトの配列を整数の配列に変換しようとしていることです。配列はそれ自体がオブジェクトでInteger[]あり、のサブクラスではありませんArrayList。また、その逆も同様です。あなたの場合にあなたがしなければならないことは、次のような個々のアイテムをキャストすることです:

Integer intArr[] = new Integer[arrList.size()];
for(int i=0; i<intArr.length; i++)
{
    intArr[i] = (Integer)arrList.get(i);
}

当然、配列リスト内の個々の要素の型がIntegerでない場合、ClassCastExceptionが発生する可能性があります。

于 2011-07-14T10:34:21.493 に答える
1

toArray(T[] a)パラメータを取ります:「a-リストの要素が十分に大きい場合はリストの要素が格納される配列。それ以外の場合は、同じラントの新しい配列」

于 2011-07-14T10:37:18.147 に答える
1

まず第一に、これはArrayListをタイプにバインドしませんInteger

ArrayList <Integer> arrList =new ArrayList();

代わりに、これが発生し、rawタイプにarrList割り当てられますが、それは問題ではありません。ArrayList

問題は、

intArr=(Integer[])arrList.toArray();

arrListraw型であるため(割り当てのため、コンパイラーによって割り当てられnew ArrayList<Object>()ます)、Object[]代わりに効果的に取得します。

に割り当てarrListnew ArrayList<Integer>()、これを実行してみてください。

intArr = arrList.toArray(new Integer[arrList.size()]);
于 2011-07-14T10:37:52.087 に答える