在我遇到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;
}
//...
答案 0 :(得分:1)
答案是由于类的泛型类型参数的范围。它适用于每个非static
成员,包括内部类,但不包括static
嵌套类。
因此,LinkedList
的{{1}}类型参数在内部类AnyType
的范围内,并且不必声明它。此外,LinkedListIterator
不在AnyType
嵌套类static
的范围内,因此它需要具有自己的类型参数(不必将其命名为相同)。