我正在创建一个通用的链接堆栈。创建下一个显示的新节点时会显示此错误:
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;
}
}
答案 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
不同。