如何在Java中实例化通用递归类

时间:2017-05-10 13:13:57

标签: java class generics recursion

我的问题是我使用的是非我开发的类(我从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<...>>>>;

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

3 个答案:

答案 0 :(得分:5)

一种方法是扩展Node,如:

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

然后将其实例化为:

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

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

答案 1 :(得分:4)

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

class StringNode extends Node<String, StringNode> {
}

答案 2 :(得分:2)

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

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

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

class StringNode extends Node<String, StringNode> { }

并通过

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

StringNode n = new StringNode();