黑马程序员技术交流社区

标题: 转换为数组toArray的时候为什么老出错? [打印本页]

作者: 耿晓波    时间: 2013-4-15 11:02
标题: 转换为数组toArray的时候为什么老出错?
ArrayList <Integer> list = new ArrayList <Integer>();
                for(int i = 0 ; i < 5; i ++)
                {
                        list.add(i);
                }
                Integer[] a = list.toArray();//这里为什么出错呢,已经用泛型了?
作者: 殇_心。    时间: 2013-4-15 11:28
list.toArray();  这里返回的对象是object,所以会编译通不过。
正确代码如下:
Integer []a = new Integer[list.size()];
  list.toArray(a);
作者: 刘永建    时间: 2013-4-15 11:35
你可以试着用下面的两种方法解决
1、
Object[] o =  list.toArray();
2、
Integer[] a = list.toArray(new Integer[0]);
就算用的是泛型,toArray的返回类型也是Object类型,而强制类型转换是不允许数组强制的,所以有了带参数的toArray方法
而带参数的toArray(T[] a) 方法,则是根据参数数组的类型,构造了一个对应类型的,长度跟ArrayList的size一致的空数组,虽然方法本身还是以 Object 数组的形式返回结果,不过由于构造数组使用的ComponentType跟需要转型的ComponentType一致,就不会产生转型异常;你可以试着这样写:
public static void main(String[] args)
        {
                ArrayList <Integer> list = new ArrayList <Integer>();
                for(int i = 0 ; i < 5; i ++)
                {
                        list.add(i);
                }
                Object[] o =  list.toArray();
                Integer[] a = list.toArray(new Integer[0]);
                System.out.println(Arrays.toString(o));
                for(int i : a)
                {
                        System.out.println(i);
                }
               
        }







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2