我想弄清楚静态嵌套类与内部类(非静态嵌套类)的实现中的细微差别。例如,在http://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/Queue.java.html,你可以找到下面的代码:混合内部类和静态嵌套类
public class Queue<Item> implements Iterable<Item> {
private Node<Item> first; // beginning of queue
private Node<Item> last; // end of queue
private int N; // number of elements on queue
// helper linked list class
private static class Node<Item> {
private Item item;
private Node<Item> next;
}
...
/**
* Returns an iterator that iterates over the items in this queue in FIFO order.
*
* @return an iterator that iterates over the items in this queue in FIFO order
*/
public Iterator<Item> iterator() {
return new ListIterator<Item>(first); //why parameter needed?
}
// an iterator, doesn't implement remove() since it's optional
private class ListIterator<Item> implements Iterator<Item> {
private Node<Item> current; //why not current = first?
public ListIterator(Node<Item> first) {
current = first;
}
public boolean hasNext() { return current != null; }
public void remove() { throw new UnsupportedOperationException(); }
public Item next() {
if (!hasNext()) throw new NoSuchElementException();
Item item = current.item;
current = current.next;
return item;
}
}
...
我不知道为什么你必须通过的ListIterator
构造函数传递变量first
?为什么我不能在声明中使用private Node<Item> current = first;
。我知道如果我用Node
的内部课程,我可以直接指定first
到current
(如http://algs4.cs.princeton.edu/13stacks/LinkedQueue.java.html)。
这不是必须的,但它更好**封装**。 –
祝贺您获得正确的术语。 – EJP