作爲練習的一部分,我正在實現一個支持Enumerations的ArrayList。適配器設計模式|將Iterator轉換爲Enumeration的適配器| ConcurrentModificationException
下面是一個迭代器轉換爲枚舉適配器:
public class MyEnumeratorAdapter<Object> implements Enumeration<Object> {
private Iterator<Object> adaptee;
public MyEnumeratorAdapter(Iterator<Object> it) {
this.adaptee = it;
}
@Override
public boolean hasMoreElements() {
return adaptee.hasNext();
}
@Override
public Object nextElement() {
return adaptee.next();
}
}
和我的ArrayList類是:
public class MyArrayList<Object> extends ArrayList<Object> {
public MyArrayList() {
this.enumerator = new MyEnumeratorAdapter<Object>(this.iterator());
}
public Enumeration<Object> enumerator() {
return this.enumerator;
}
public boolean hasMoreElements() {
return this.enumerator.hasMoreElements();
}
public Object nextElement() {
return this.enumerator.nextElement();
}
private static final long serialVersionUID = 1L;
private Enumeration<Object> enumerator;
}
然而
,當我嘗試這個測試用下面的代碼,我m得到java.util.ConcurrentModificationException
public static void main(String[] args) {
MyArrayList<String> names = new MyArrayList<String>();
names.add("jim");
names.add("jack");
names.add("jai");
for (Enumeration<String> iterator = names.enumerator(); iterator
.hasMoreElements();) {
String name = (String) iterator.nextElement();
System.out.println(name);
}
}
我在做什麼錯誤?
我可以有一個支持枚舉的ArrayList類嗎?
修復1和3問題。謝謝。 如果myArrayList必須支持它,我應該在哪裏放置Enumeration的方法? MyEnumeratorAdapter中的 – HanuAthena 2009-08-29 16:26:07
? – dfa 2009-08-29 17:34:47