2012-04-26 1 views
2

Я пишу класс узла, и я хочу, чтобы сделать внутренний класс узла итератора, я написал до сих пор:называют этот экземпляр во внутреннем классе

import java.util.Iterator; 
import java.util.NoSuchElementException; 

public class Node<E> { 
    E data; 
    Node<E> next; 
    int current = 0; 

    public Node(E data, Node<E> next){ 
    this.data = data; 
    this.next = next; 
    } 

    public void setNext(Node<E> next){ 
    this.next = next; 
    } 

    private class NodeIterator implements Iterator { 

    /*@Override 
    public boolean hasNext() {  
     Node<E> node = this; 
     for(int i=1; i<current; i++){ 
     node = node.next; 
     } 
     if(node.next==null){ 
     current = 0; 
     return false; 
     } 
     current++; 
     return true; 
    }*/ 

    @Override 
    public boolean hasNext() { 
     // code here 
    } 

    /*public Node<E> next() {  
     if(next==null){ 
     throw new NoSuchElementException(); 
     } 
     Node<E> node = this; 
     for(int i=0; i<current && node.next!=null; i++){ 
     node = node.next; 
     } 
     return node; 
    }*/ 

    @Override 
    public Node<E> next() { 
     // code here 
    } 

    @Override 
    public void remove() { 
     throw new UnsupportedOperationException(); 
    } 
    } 
} 

Я хочу, чтобы сделать объект узла внутри NodeIterator вот так: Node<E> node = this;.

Прокомментированный код был написан в классе Node, я реализовал Iterator в самом классе Node, но я хочу сделать его внутренним классом, любым предложением, как сделать это так?

+3

Так что вы хотите получить доступ к внешнему узлу? Попробуйте 'Node node = Node.this;'. Также обратите внимание, что вы можете захотеть кэшировать следующий узел в итераторе, а не итерировать от первого узла до текущего узла. – Thomas

+0

Спасибо Thomas: D –

ответ

8

Просто написать:

Node<E> node = Node.this; 

Он получает доступ к вмещающему внешнему экземпляру узла