问题描述
- 泛型除了标示类还有其他的作用吗?
-
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的非泛型版本。
至于报错,肯定是你写的不合语法而已。
时间: 2024-11-02 22:17:31