Несовместимые типы, инициализирующие стеки универсальных типов в Java - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь программировать структуру стека на 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);
  }
}

в основном методе, я сначала инициализирую узел с именем stackNode с помощью Integer 1, это работает. Затем я пытаюсь инициализировать мой стек с помощью 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

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы используете Stack<Node<Integer>> и Stack<T>, что составляет T=Node<Integer>, но в конструкторе у вас есть Node<T>, поэтому для него потребуется Node<Node<Integer>>, а вы даете Node<Integer>

Вам нужно установить одинаковое для обоих (и для ясности можете использовать <> (оператор ромба):

Node<Integer> stackNode = new Node<>(1);
Stack<Integer> myStack = new Stack<>(stackNode);
0 голосов
/ 29 июня 2018

Stack и Node должны иметь одинаковый тип:

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);
...