Java中初始化泛型类型堆栈的不兼容类型
我试图在Java上编写一个堆栈结构。我的代码如下所示:Java中初始化泛型类型堆栈的不兼容类型,java,generics,compiler-errors,java-8,stack,Java,Generics,Compiler Errors,Java 8,Stack,我试图在Java上编写一个堆栈结构。我的代码如下所示: 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(){
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);
}
}
类堆栈{
私有静态类节点{
私有T数据;
私有节点下一步;
公共节点(T数据){
这个数据=数据;
}
}
私有节点顶部;
公共堆栈(){
top=null;
}
公共堆栈(节点顶部){
this.top=top;
}
公共静态void main(字符串[]args){
节点stackNode=新节点(1);
Stack myStack=新堆栈(stackNode);
}
}
在main方法中,我首先用整数1初始化一个名为stackNode的节点,这样就可以了。
然后我尝试做的是初始化堆栈,将stackNode作为顶部节点。这不起作用,编译时出现错误:
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
Stack.java:56:错误:不兼容的类型:无法将节点转换为节点
Stack myStack=新堆栈(stackNode);
注:部分信息已被简化;重新编译
-Xdiags:获取完整输出的详细信息1错误
堆栈和节点应具有相同的类型:
Node<Integer> stackNode = new Node<Integer>(1);
Stack<Integer> myStack = new Stack<Integer>(stackNode);
Node stackNode=新节点(1);
Stack myStack=新堆栈(stackNode);
顺便说一句,使用Java 7中引入的
语法可以稍微清理代码:
Node<Integer> stackNode = new Node<>(1);
Stack<Integer> myStack = new Stack<>(stackNode);
Node stackNode=新节点(1);
Stack myStack=新堆栈(stackNode);
您使用堆栈
和堆栈
,这使得T=Node
,但是在构造函数中您有节点
,因此它需要一个节点
,并且您给出了一个节点
您需要为两者设置相同的值(为了清晰起见,可以使用
(菱形运算符):
Node stackNode=新节点(1);
Stack myStack=新堆栈(stackNode);
不应该是Stack myStack=new Stack(stackNode)代码>?必须为堆栈和节点类使用不同的泛型变量。否@JanLochman参数T
是要存储在堆栈中的类型,也存储在堆栈节点中。参见Mureinik的回答
Node<Integer> stackNode = new Node<>(1);
Stack<Integer> myStack = new Stack<>(stackNode);