2013-03-10 3 views
1

방금 ​​작성한 코드의 일부입니다. 기본적으로 클래스 DocumentIterable 인터페이스를 구현합니다. 반복자는 링크 된 목록과 같은 노드를 반복합니다. remove 메서드에서 Document 클래스 범위에있는 nodeMap의 참조를 사용했습니다. 그러나 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); 
      } 
     }; 
    } 
} 
+0

당신은'nodeMap'이'Iterator' 익명의 내부 클래스에서 어떻게 접근 할 수 있는지 말합니까? –

답변

1

이터레이터는 클래스 Document의 익명의 내부 클래스의 인스턴스입니다.

  • 정적 내부 클래스는 외부 클래스의 인스턴스에 연결되지 않으며 자체 멤버와 외부 클래스의 정적 멤버에만 액세스 할 수 있습니다.
  • 정적이 아닌 내부 클래스는 외부 클래스의 인스턴스에 대한 참조를 소유하므로 외부 클래스의 정적이 아닌 멤버에 직접 액세스 할 수 있습니다. 이것은 코드에서 반복자가 인스턴스라는 클래스의 일종입니다.