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;

我知道向下转换是不安全的,但为什么会发生这种情况?我也尝试将 to 转换ArrayListStringto Integerint但我得到了同样的错误。

4

4 回答 4

5

尝试这样做

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

你得到的是一个类型化的Integer数组而不是一个对象数组。

于 2011-07-14T10:32:41.613 回答
1

这里的问题是您正在尝试将对象数组转换为整数数组。Array 本身就是一个对象,Integer[]不是 的子类ArrayList,反之亦然。在您的情况下,您必须做的是投射单个项目,如下所示:

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

当然,如果数组列表中的单个元素不是整数类型,您可能会收到 ClassCastException。

于 2011-07-14T10:34:21.493 回答
1

toArray(T[] a)接受一个参数:“a - 列表元素要存储到的数组,如果它足够大;否则,相同的 runt 的新数组”

于 2011-07-14T10:37:18.147 回答
1

首先,这不会将 ArrayList 绑定到 type Integer

ArrayList <Integer> arrList =new ArrayList();

相反,这是发生的事情,arrList被分配给ArrayList原始类型,但这不是问题。

问题在于,

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

因为arrList是原始类型(由于分配,它被new ArrayList<Object>()编译器分配),所以你实际上得到了一个Object[]

尝试分配arrListnew ArrayList<Integer>()执行此操作:

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