如何将对象类型的数组转换为普通数组?

时间:2014-09-29 04:10:24

标签: java types downcast mismatch

我计划将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(); 
     }  
    }
}

3 个答案:

答案 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