1
下面是我剛剛寫的代碼的一部分。基本上Document
類實現了Iterable
接口。迭代器將像鏈表一樣遍歷節點。在remove
方法中,我使用了nodeMap
的參考,它在Document
類範圍內。然而this
參考應該參考Iterator
本身,所以它怎麼能找到這個對象?或者是Iterator
Document
的子類?Java迭代器變量範圍
我以前沒有想過這個問題。突然讓我感到困惑。
public class Document implements Iterable<DocumentNode> {
Map<Integer, DocumentNode> nodeMap;
public Iterator<DocumentNode> iterator() {
return new Iterator<DocumentNode>() {
DocumentNode node = nodeMap.get(0);
@Override
public boolean hasNext() {
return node != null && node.next != null;
}
@Override
public DocumentNode next() {
if (node == null) {
throw new IndexOutOfBoundsException();
}
return node.next;
}
@Override
public void remove() {
if (node == null) {
throw new IndexOutOfBoundsException();
}
if (node.prev != null) {
node.prev.next = node.next;
}
if (node.next != null) {
node.next.prev = node.prev;
}
nodeMap.remove(node.documentID);
}
};
}
}
你的意思是:在'Iterator'匿名內部類中怎麼可以訪問'nodeMap'? – 2013-03-10 18:50:59