A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

ArrayList <Integer> list = new ArrayList <Integer>();
                for(int i = 0 ; i < 5; i ++)
                {
                        list.add(i);
                }
                Integer[] a = list.toArray();//这里为什么出错呢,已经用泛型了?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

2 个回复

倒序浏览
list.toArray();  这里返回的对象是object,所以会编译通不过。
正确代码如下:
Integer []a = new Integer[list.size()];
  list.toArray(a);

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
你可以试着用下面的两种方法解决
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);
                }
               
        }


评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马