在抽象情况下返回节点(Java)

时间:2014-11-23 04:53:41

标签: java generics stack

我有一个堆栈的以下界面:

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”。

如何保持堆栈通用但也能够返回节点?

1 个答案:

答案 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();
}