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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

[AppleScript] 纯文本查看 复制代码
List<String> list = new ArrayList<>();
		list.add("afjdpsoifj2");
		list.add("af");
		list.add("afj");
		list.add("a");
		list.add("afjdp554");
		list.add("afjdpsoif75");
		list.add("afjdp744");
		Iterator<String> it = list.iterator();
		while (it.hasNext()){
			String s = it.next();
		}

在这里,如果迭代器后面不加String泛型的话,编译会报错,必须要在it.next()前面加上强转才行.迭代器后面加了泛型的话就不用了

我有一个疑问 从迭代器new出来的方式就可以看到迭代器是基于容器对象的,容器都加了泛型了为什么迭代器还一定要加才行?
如果不加的话有可能导致什么后果?

2 个回复

倒序浏览
迭代器是接收it.next()给到的值  前面往集合中存放的时候就被提升到object类型了  取出要使用子类特有方法的时候 需要向下转型   而it.next()出来的是String类型  如果集合中存了Integer类型的元素 强转时就会string string=(String) (new Integer(3))  这样会出现问题 java.lang.ClassCastException 因为String和Integer 没有子父类关系
回复 使用道具 举报
langyabang1110 发表于 2016-10-1 16:57
迭代器是接收it.next()给到的值  前面往集合中存放的时候就被提升到object类型了  取出要使用子类特有方法 ...

我明白了 ,因为泛型并不是百分百锁死的,可以通过反射来绕过泛型,如果存入的数据不一样的话就会有错 所以迭代器也得加泛型
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马