java - 不兼容的类型在 Java 中初始化泛型类型的堆栈

标签 java generics compiler-errors java-8 stack

我正在尝试在 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

最佳答案

StackNode应该有相同的类型:

Node<Integer> stackNode = new Node<Integer>(1);
Stack<Integer> myStack = new Stack<Integer>(stackNode);

顺便说一句,使用 <> Java 7 中引入的语法可以稍微清理一下代码:

Node<Integer> stackNode = new Node<>(1);
Stack<Integer> myStack = new Stack<>(stackNode);

关于java - 不兼容的类型在 Java 中初始化泛型类型的堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51101276/

相关文章:

java - 翻译的最佳实践

java - 使用Keylistener后如何重新绘制图形?

c# - 带有 Action<T> 参数的通用方法

C++ - SetUnion 函数的字符串数组参数

Java/泛型 : Return a list of extending a type?

java - Servlet、JSP、JPA - 未找到属性异常

java - 使用流 API 将 arraylist 添加到 arraylist

使用动态参数调用泛型扩展方法时,C# 编译器失败并出现误导性错误

Java 泛型和多态性

c++ - 以下代码段出了什么问题?