public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
list.add("hello");
list.add("world");
list.add("java");
for(String i : list){
System.out.println(i);
}
}
为什么不声明泛型String之后用foreach遍历就会报错?泛型在这里起到的作用是什么.?
for-loop的底层使用的是iterator,试想你的程序编译器转化后和以下代码一致,就没问题
Iterator i = list.iterator();
while(iter.hasNext()) {
String i = iter.next(); //iterator.next()是string类型
}
如果不用范型,你的程序就是
Iterator iterator = list.iterator();
while(iterator.hasNext()) {
String i = iterator.next(); // 看到问题了么,这里iteraotr.next()是object,类型转换失败啊
}
泛型限定了list的add方法只能添加进去string,而不能是别的类型。也保证了遍历的时候,取出来的都是string。
不知道你说的“不声明泛型String”报错是什么意思。本身你也可以用ArrayList的非泛型版本。
至于报错,肯定是你写的不合语法而已。