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(){

我试图在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(){
    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);