2014-03-25 34 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