Java中具有内部节点和迭代器的自定义通用链接列表:键入混淆

时间:2014-11-13 21:27:33

标签: java generics iterator

在我遇到this之前,我认为自己已经掌握了泛型,这是一个带有内部Node和Iterator类的Generic LinkedList的基本实现。下面粘贴了一段剪辑的剪辑版本。

问:为什么我们LinkedListIterator而不是LinkedListIterator<AnyType>

答:请参阅答案here

精细。说得通。但是,

问:为什么我们有Node<AnyType>而不是Node?由于Node类也在LinkedList的范围内,从最后一个答案开始,我希望Node在其定义中也不需要。

public class LinkedList<AnyType> implements Iterable<AnyType>
{
   private Node<AnyType> head;

//...

   private static class Node<AnyType>
   {
      private AnyType data;
      private Node<AnyType> next;

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

   public Iterator<AnyType> iterator()
   {
      return new LinkedListIterator();
   }

   private class LinkedListIterator  implements Iterator<AnyType>
   {
      private Node<AnyType> nextNode;

      public LinkedListIterator()
      {
         nextNode = head;
      }
//...

1 个答案:

答案 0 :(得分:1)

答案是由于类的泛型类型参数的范围。它适用于每个非static成员,包括内部类,但不包括static嵌套类。

因此,LinkedList的{​​{1}}类型参数在内部类AnyType的范围内,并且不必声明它。此外,LinkedListIterator不在AnyType嵌套类static的范围内,因此它需要具有自己的类型参数(不必将其命名为相同)。