【问题标题】:Creating one generic object and using it to create another generic object in java创建一个泛型对象并使用它在 java 中创建另一个泛型对象
【发布时间】:2018-07-20 21:13:24
【问题描述】:

我正在尝试编写与二叉树相关的代码。为此,我创建了一个名为“Node”的通用类,并使用了另一个名为“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

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

【问题讨论】:

    标签: java generics elements


    【解决方案1】:

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

    考虑ArrayList&lt;Integer&gt;。这是一个整数列表。它不是整数数组元素的列表(即ArrayList&lt;ArrayElement&lt;Item&gt;&gt;

    您只需将声明更改为:

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

    T 被视为Node&lt;Integer&gt;,正如你所提供的,那么构造函数实际上变成了

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

    您传递给它的 Node&lt;Integer&gt; 不匹配,因此会出现编译器错误。

    【讨论】:

    • 你好迈克尔,谢谢。但是如果我声明这些节点的队列,我应该将其声明为 Queue que = new Queue();或 Queue que = new Queue();仍然有点困惑。
    • @user2776187 你的树是Tree&lt;Integer&gt;。整数节点队列为Queue&lt;Node&lt;Integer&gt;&gt;。我建议阅读Oracle generics tutorial
    • 感谢您的回复。我将浏览文档。我尝试了以下声明节点队列的方法,它对我有用,因此有些混乱:- Queue queue = new LinkedList();
    • 在这种情况下,您使用的是 Queue 的泛型类型,但 Node 的 原始类型。它会给你一个编译器警告,但它不是编译错误。这意味着节点可以包含任何对象,而不仅仅是整数。您应该尽可能避免使用原始类型。
    猜你喜欢
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2015-05-21
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多