运行时例外 - 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
转换为String
到Integer
到int
,但我得到了同样的错误。
答案 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()]);