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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马刘杰 中级黑马   /  2013-2-23 15:12  /  1162 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马刘杰 于 2013-2-23 15:54 编辑

原帖地址http://bbs.itheima.com/thread-26006-1-1.html

ArrayList<? extends Object> aList = new ArrayList<String>();
不可以向aList中添加任何元素,因为不能保证aList中真正保存什么类型的对象。aList中还可以保存Integer类型呢,所以aList中不能添加元素。
不能添加元素,要这玩意干啥呢?
是为了向外读数据,比如,一列表中充满了数据,从中向外读数据就是很有用的比如从List<Integer>列表中把数据读出来,复制到List<Number>中。

我现在有一个疑问,为什么下面代码会报异常?
  1. Collection<Integer> aCol=new ArrayList<Integer>();
  2.                 aCol.add(1);
  3.                 aCol.add(2);
  4.                 aCol.add(3);
  5.                
  6.                 List<? extends Number> srcList = new ArrayList<Integer>(aCol);
  7.                 System.out.println(srcList);//这里输出[1,2,3]
  8.                
  9.                 ArrayList<Number> destList = new ArrayList<Number>();

  10.                 Collections.copy(destList, srcList);//这儿报异常
复制代码

4 个回复

倒序浏览
原因:
Collections.copy(destList, srcList);将srcList中的元素复制到destList中。但必须保证destList中元素的个数要等或大于srcList中元素的个数。
解决:给destList添加几个元素。
     Collection<Integer> aCol=new ArrayList<Integer>();
        aCol.add(1);
        aCol.add(2);
        aCol.add(3);
        List<? extends Number> srcList = new ArrayList<Integer>(aCol);
        System.out.println(srcList);//这里输出[1,2,3]
        
        List<Number> destList = new ArrayList<Number>(5);
        destList.add(2);
        destList.add(4);
        destList.add(5);
        destList.add(6);
        Collections.copy(destList, srcList);
        System.out.println(destList);//打印[1,2,3,6]
回复 使用道具 举报
查看源码
if (srcSize > dest.size())
            throw new IndexOutOfBoundsException("Source does not fit in dest");
所有解决
ArrayList<Number>  destList = new ArrayList<Number>(100);
        destList.add(2);
        destList.add(3);
        destList.add(9);
        destList.add(11);
               
        Collections.copy(destList, srcList);//这儿报异常
        System.out.println(destList);

回复 使用道具 举报
构造方法  int initialCapacity 不好用   ArrayList<Number>  destList = new ArrayList<Number>(100);
弄成100 不好用
回复 使用道具 举报
顾传文 发表于 2013-2-23 15:39
原因:
Collections.copy(destList, srcList);将srcList中的元素复制到destList中。但必须保证destList中元 ...

谢谢啊,我明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马