2014-03-25 37 views
0

我正在创建一个通用链接堆栈。此错误时显示出创造下一个新节点:错误参数类型E隐藏类型E

private class Node<E> { 

什么是错我的代码导致此?

public class LinkedStack<E> implements StackBehavior<E> { 

    private class Node<E> { 
     private E element; 
     private Node<E> next; 
     private Node(E element) { 
      this.element = element; 
      this.next = null; 

     } 
     private Node(E element, Node<E> next) { 
      this.element = element; 
      this.next = next; 
     } 
    } 

    private Node<E> top = null; 

    public void push(E item) { 
     top = new Node<E>(item, top); 
    } 

    public E pop() { 
     if (top == null) { 
      throw new EmptyStackException("Pop error: Stack is empty."); 
     } 
     E item = top.element; 
     top = top.next; 
     return item; 
    } 

    public E peek() { 
     if (top == null) { 
      throw new EmptyStackException("Peek error: Stack is empty."); 
     } 
     return top.element; 
    } 

    public boolean isEmpty() { 
     return (top == null); 
    } 

    public String toString() { 
     Node<E> curr = top; 
     String stringStack = "top"; 
     while (curr != null) { 
      stringStack += " --> " + curr.element; 
      curr = curr.next; 
     } 
     return stringStack; 
    } 
} 

回答

1

在此声明

public class LinkedStack<E> implements StackBehavior<E> { 

您声明命名E一个新的变量类型。

在这个内部类声明

private class Node<E> { 

你声明一个新的变量类型也称为E。里面Node任何使用Node.E隐藏访问类型变量ELinkedStack声明。

这是一个警告,而不是错误,但考虑更改名称,如果你确实需要的类型变量(但它似乎并不像你这样做)。

0

问题是,<E>Node<E>是从顶级LinkedStack<E>隐藏<E>。有两种解决方案:

  • 从内部类删除<E>。它内部的E的使用将自动参考顶级的通用E

  • 使它的内部static类。这将使其通用E不同于顶级的E