我有一个堆栈的以下界面:
public interface Stack <E> {
public void push (E item);
public E pop();
public E peek();
public String toString();
}
以及实现它的以下类:
public class LinkBasedStack<E> implements Stack<E> {
Node<E> head;
public void push (E item){
if (head == null){
Node newNode = new Node(item);
head = newNode;
}
}
public E pop(){
return head; //error
}
}
尽管方法不完整,但我还是面临Java的问题:
“类型不匹配:无法从节点转换为E”。
如何保持堆栈通用但也能够返回节点?
答案 0 :(得分:0)
您的pop()
方法签名声明您返回的类型为E
,但head声明为Node<E>
,这是不一样的。无论如何,您可能不希望返回Node
本身。您将E
存储在Node
中的事实是您不需要向Stack
类的用户公开的实现细节。
我认为你的Node
类的实现有某种方法可以将存储的数据拉出来。
尝试类似:
public E pop() {
// don't forget to point head to the next Node on the stack
return head.getValue();
}