错误参数类型E隐藏类型E.

时间:2014-03-25 21:44:04

标签: java stack

我正在创建一个通用的链接堆栈。创建下一个显示的新节点时会显示此错误:

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;
    }
}

2 个答案:

答案 0 :(得分:1)

在此声明中

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

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

在这个内部类声明中

private class Node<E> {

您正在声明一个名为E的新类型变量。在Node.E内使用Node会隐藏E中声明的可访问类型变量LinkedStack

这是一个警告,而不是错误,但如果您确实需要类型变量,请考虑更改名称(但它看起来并非如此)。

答案 1 :(得分:0)

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

  • 从内部类中删除<E>。在其中使用E会自动引用顶级类中的通用E

  • 将其设为内部static类。这会使其通用E与顶级的E不同。