これは、私が今書いたコードの一部です。基本的に、クラスはインターフェイスをDocument
実装しIterable
ます。イテレータは、リンクされたリストのようにノードを反復処理します。remove
メソッドでは、クラス スコープにある の参照を使用しましnodeMap
たDocument
。ただし、this
参照はIterator
それ自体を参照する必要があるため、どのようにしてそのオブジェクトを見つけることができるのでしょうか? それともIterator
の子クラスDocument
ですか?
私はこれまでこの質問について考えたことがありませんでした。突然、自分を混乱させました。
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);
}
};
}
}