在Java中创建一个通用对象并使用它来创建另一个通用对象

时间:2018-07-20 13:01:16

标签: java generics elements

我正在尝试编写与二叉树有关的代码。为此,我创建了一个称为“节点”的通用类,并使用了另一个名为“ Tree”的通用类。

Node.java

public class Node<T>{

   private T element;

   private Node<T> leftObj;

   private Node<T> rightObj;

   public Node(T element){

     this.element=element;

     this.leftObj=null;

     this.rightObj=null;
   }
   //remaining are getter and setter method

}

Tree.java:

public class Tree<T>{

    private Node<T> root;

    public Tree(Node<T> node){

    this.root=node;

  }

 // remaining is adding node and deleting node method

}

现在我正试图在其他类中使用这些类的对象并面临问题。

abc.java

public class abc{

    public static void main(String[] args){

       Node<Integer> tempNode = new Node<Integer>(1);

       //getting error at following line

       Tree<Node<Integer>> tree = new Tree<Node<Integer>>(tempNode);

    }

}

在创建树对象期间显示以下错误:-

The constructor Tree<Node<Integer>>(Node<Integer>) is undefined

请指导我解决此问题,并帮助我理解通用概念(我是本主题的新手。)

1 个答案:

答案 0 :(得分:1)

它不是整数节点的。它只是一棵整数树。

考虑ArrayList<Integer>。这是整数列表。它不是不是整数数组元素的列表(即ArrayList<ArrayElement<Item>>

您只需要将声明更改为:

Tree<Integer> tree = new Tree<>(tempNode);

按照您所提供的,将T设为Node<Integer>时,构造函数实际上变为

public Tree(Node<Node<Integer>> node){

您要向其传递不匹配的Node<Integer>,因此会导致编译器错误。