我正在尝试在Java上编写Stack结构。我的代码如下:
class Stack<T>{
private static class Node<T>{
private T data;
private Node<T> next;
public Node(T data){
this.data = data;
}
}
private Node<T> top;
public Stack(){
top = null;
}
public Stack(Node<T> top){
this.top = top;
}
public static void main(String []args){
Node<Integer> stackNode = new Node<Integer>(1);
Stack<Node<Integer>> myStack = new Stack<Node<Integer>>(stackNode);
}
}
在main方法中,我首先使用Integer 1初始化一个名为stackNode的节点,此方法有效。 然后,我尝试用stackNode作为顶部节点初始化Stack。这不起作用,当我编译时出现错误:
Stack.java:56: error: incompatible types: Node<Integer> cannot be converted to Node<Node<Integer>>
Stack<Node<Integer>> myStack = new Stack<Node<Integer>>(stackNode);
Note: Some messages have been simplified; recompile with
-Xdiags:verbose to get full output 1 error
答案 0 :(得分:5)
Stack
和Node
的类型应相同:
Node<Integer> stackNode = new Node<Integer>(1);
Stack<Integer> myStack = new Stack<Integer>(stackNode);
BTW,使用Java 7中引入的<>
语法可以稍微清理一下代码:
Node<Integer> stackNode = new Node<>(1);
Stack<Integer> myStack = new Stack<>(stackNode);
答案 1 :(得分:3)
您使用Stack<Node<Integer>>
和Stack<T>
组成T=Node<Integer>
,但是在构造函数中您拥有Node<T>
,因此它需要一个Node<Node<Integer>>
并给出一个{ {1}}
您需要为两者都设置相同(为了清楚起见,可以使用Node<Integer>
(钻石运算符):
<>