我有以下问题:
鉴于:
public class A{
Collection<B> elements = new ArrayList<B>();
}
public class B{
Collection<B> linkedElements = new ArrayList<B>();
}
linkedElements 的所有元素也都属于元素。我希望每次从元素集合中删除一个元素时,它的链接元素也会从该集合中删除。我尝试将观察者附加到 Iterator.remove 操作并在那里触发从元素列表中删除linkedElements,但由于逻辑本身,我总是遇到 ConcurrentModificationException。
更新:这是导致错误的代码:
public class A{
Collection<B> elements = new ArrayList<B>(){
public Iterator<B> iterator() {
return new ProxyIterator(super.iterator());
};
private class ProxyIterator implements Iterator{
Iterator it;
Object lastObject;
public ProxyIterator(Iterator proxied){
it = proxied;
}
@Override
public boolean hasNext() {
return it.hasNext();
}
@Override
public Object next() {
return lastObject = it.next();
}
@Override
public void remove() {
it.remove()
for (B linkedElement : ((B)lastObject).getlinkedElements()) {
A.this.getElements().remove(linkedElement);
}
}
}
}
使用此代码,只需调用 aA.getElements().clear()
将触发 a ConcurrentModificationException
... 并且没关系,因为我正在从元素列表中删除所有链接的元素,同时删除一个元素。这就是为什么我需要另一种方法。