【问题标题】:How to instantiate a generic recursive class in Java如何在 Java 中实例化一个泛型递归类
【发布时间】:2017-05-10 13:13:57
【问题描述】:

我的问题是我使用的不是我开发的类(我从 Microsoft Azure SDK for Java 中获取)。该类名为Node,您可以看到它here

如您所见,该类是一个像这样递归声明的泛型类:

public class Node<DataT, NodeT extends Node<DataT, NodeT>> {
      ...
}

当我尝试实例化它时,我不知道该怎么做。我正在这样做,但我知道这不是方法,因为它没有尽头:

Node<String, Node<String, Node<String, Node<...>>>> myNode = new Node<String, Node<String, Node<String, Node<...>>>>;

希望你能理解我的问题。谢谢。

【问题讨论】:

  • 可能声明它是抽象的会澄清
  • @ArneBurmeister 正是我的意思! Node 类不是抽象的,这根本没有帮助。

标签: java class generics recursion


【解决方案1】:

一种方法是将Node 扩展为:

class MyNode<T> extends Node<T, MyNode<T>> {
}

然后像这样实例化它:

Node<String, MyNode<String>> node1 = new MyNode<String>();

MyNode<Integer> node2 = new MyNode<Integer>();

【讨论】:

  • 精细灵活的方式。
【解决方案2】:

您必须声明一个扩展 Node 的类,以便您可以使用该类的名称:

class StringNode extends Node<String, StringNode> {
}

【讨论】:

    【解决方案3】:

    您可以在变量声明中使用通配符:

    Node<String, ?> n = new Node<>();
    

    或者你可以创建一个显式的子类

    class StringNode extends Node<String, StringNode> { }
    

    并通过

    实例化它
    Node<String, ?> n = new StringNode();
    

    StringNode n = new StringNode();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      相关资源
      最近更新 更多