从对象向下转换为整数运行时错误:java.lang.ClassCastException

时间:2011-07-14 10:29:41

标签: java downcast

运行时例外 - 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 个答案:

答案 0 :(得分:5)

尝试这样做

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

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

答案 1 :(得分: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。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

ArrayList <Integer> arrList =new ArrayList();

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

问题在于,

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

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

尝试将arrList分配给new ArrayList<Integer>()并执行此操作:

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