黑马程序员技术交流社区
标题:
遇到个费解的泛型问题。。。
[打印本页]
作者:
舒远
时间:
2012-9-18 22:33
标题:
遇到个费解的泛型问题。。。
public static void main(String[] args) throws Exception {
ArrayList<? extends Object> aList = new ArrayList<String>();//编译正常通过
aList.add(null);//只能存入null,其他任何数据都进不来。为什么只能存入null?
aList.add(null);
System.out.println(aList.size());//打印出来2
aList.remove(null);
System.out.println(aList.size());//aList中存在两个null,打印出来为1,为什么?
}
复制代码
作者:
尤圣回
时间:
2012-9-18 22:46
public static void main(String[] args) throws Exception {
ArrayList<? extends Object> aList = new ArrayList<String>();//编译正常通过
aList.add(null);//只能存入null,其他任何数据都进不来。为什么只能存入null? 因为泛型的类型不知道 又因为是基础了Object 所以只能存入null
aList.add(null);
System.out.println(aList.size());//打印出来2
aList.remove(null);
System.out.println(aList.size());//aList中存在两个null,打印出来为1,为什么?为什么打印1 因为 aList.remove(null);移除了
}
作者:
王宝龙
时间:
2012-9-19 00:24
public static void main(String[] args) throws Exception {
ArrayList<? extends Object> aList = new ArrayList<String>();//编译正常通过
aList.add(null);//只能存入null,其他任何数据都进不来。为什么只能存入null?
aList.add(null);
System.out.println(aList.size());//打印出来2
aList.remove(null);
System.out.println(aList.size());//aList中存在两个null,打印出来为1,为什么?
}
复制代码
第一个问题:ArrayList<? extends Object> aList = new ArrayList<String>();//这样定义是不允许的 左右必须一致
第二个问题:可以查看API文档
aList.remove(null);
remove方法是移除此列表中首次出现的指定元素(如果存在)。所以是1 没有错!
作者:
舒远
时间:
2012-9-19 09:18
各位回帖的辛苦了!
但我还是不明白,第一个问题:为什么这样的集合中就只能存入null值,其他啥也存不了,真心不明白!。
第二个问题通过查文档已经明白了!
作者:
黑马刘杰
时间:
2013-2-23 15:52
我上网查了一下,貌似是这么个意思:
ArrayList<? extends Object> aList = new ArrayList<String>();
不可以向aList中添加任何元素,因为不能保证aList中真正保存什么类型的对象。aList中还可以保存Integer类型呢,所以aList中不能添加元素。
不能添加元素,要这玩意干啥呢?
是为了向外读数据,比如,一列表中充满了数据,从中向外读数据就是很有用的比如从List<Integer>列表中把数据读出来,复制到List<Number>中。下面是个小例子,
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]
ArrayList<Number> destList = new ArrayList<Number>();
destList.add(5);
destList.add(6);
destList.add(7);
destList.add(8);
Collections.copy(destList, srcList);
System.out.println(destList);
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2