2017-05-10 85 views
8

我的問題是我正在使用一個未由我開發的類(我從Microsoft Azure SDK for Java中獲取它)。這個類被稱爲Node,你可以看到它here如何在Java中實例化一個通用的遞歸類

正如你所看到的類被聲明遞歸這樣的通用類:

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

我希望你能理解我的問題。謝謝。

+0

可能會聲明它抽象會澄清 –

+0

@ArneBurmeister正是我的觀點!它根本無助於'Node'類不抽象。 –

回答

4

您必須聲明延伸Node這樣你就可以使用類的名稱的類:

class StringNode extends Node<String, StringNode> { 
} 
5

的方法之一是擴大Node,如:

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

然後實例它像:

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

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

細緻而靈活的方式。 – davidxxx

2

您可以使用通配符在變量聲明:

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

或者你可以創建一個明確的子類

class StringNode extends Node<String, StringNode> { } 

,並通過

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

它實例
StringNode n = new StringNode();