我计划将ArrayList
转换为普通数组。之后,我试图将该对象类型向下转换为普通数组。但它在第17行显示“无法从Object转换为int”。
package coll;
import java.util.ArrayList;
public class ToArray {
public static void main(String[] args) {
ArrayList a1=new ArrayList();
a1.add(new Integer(2));
a1.add(new Integer(8));
a1.add(new Integer(7));
a1.add(new Integer(6));
System.out.println("the contents are"+ a1);
Object ia[]=a1.toArray();
int[] a=new int[5];
for(Object i:ia)
{
a[i]=((Integer)ia[i]).intValue();
}
}
}
答案 0 :(得分:3)
Array仅采用int值进行索引。在for循环中,您试图将对象值放入索引,因此Downcast异常即将到来。
而不是:
for(Object i:ia){
a[i]=((Integer)ia[i]).intValue();
}
使用以下代码:
for(int i=0;i<ia.length;i++){
a[i] = ((Integer) ia[i]).intValue();
}
答案 1 :(得分:1)
public static void main(String[] args) {
ArrayList a1 = new ArrayList();
a1.add(new Integer(2));
a1.add(new Integer(8));
a1.add(new Integer(7));
a1.add(new Integer(6));
System.out.println("the contents are" + a1);
Integer[] ia = (Integer[])a1.toArray(new Integer[a1.size()]);
for (int i : ia) {
System.out.println(i);
}
}
答案 2 :(得分:0)
首先使用泛型并始终使用超级类型来引用对象
喜欢这个List<Integer> list = new ArrayList<Integer>();
其次没有必要这样做
list.add(new Integer(5));
您可以直接执行此操作list.add(5);
自动换行和解包将完成。
关于Array的事情,
int arr[] = new int[list.size()];
Iterator<Integer> i =list.iterator();
int count =0 ;
while(i.hasNext())
{
arr[count] = i.next();
count++;
}
通过使用泛型,您的ArrayList了解它应该只接受整数。你不需要Downcast或Upcast Anything :D