我有下面的示例java泛型代碼,我根據StackOverflow上的人的建議進行了修改。編譯正在進行。java泛型運行時error.java.util.ConcurrentModificationException
import java.util.*;
public class GenericBox<T>
{
private List<T> tList;
private Iterator<T> itor;
public GenericBox()
{
tList = new ArrayList<T>();
itor = tList.listIterator();
}
public void insert(T element)
{
tList.add(element);
}
public T retrieve()
{
if(itor.hasNext())
{
return itor.next();
}
return null;
}
public static void main (String [] args)
{
GenericBox <String> strbox = new GenericBox<String>();
GenericBox <String> intbox = new GenericBox<String>();
strbox.insert(new String("karthik"));
strbox.insert(new String("kanchana"));
strbox.insert(new String("aditya"));
String s = strbox.retrieve();
System.out.println(s);
s = strbox.retrieve();
System.out.println(s);
s = strbox.retrieve();
System.out.println(s);
}
}
我收到以下運行時錯誤。
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:819)
at java.util.ArrayList$Itr.next(ArrayList.java:791)
at GenericBox.retrieve(GenericBox.java:24)
at GenericBox.main(GenericBox.java:40)
你是說迭代器不應該是一個實例變量。每一個方法應該創建一個自己的構造函數的副本?這是一種被接受/推薦的編碼習慣嗎? – liv2hak
迭代器只能使用一次。在使用時您無法修改集合。當你想迭代時,你需要一個新的迭代器到集合中,這很簡單。大多數情況下,你甚至不需要迭代器:for-each循環會爲你創建一個:'for(T element:tList)...' –