2017-05-10 4 views
8

Mein Problem ist, dass ich eine Klasse verwende, die nicht von mir entwickelt wurde (ich habe es von Microsoft Azure SDK für Java genommen). Die Klasse heißt Knoten und Sie können es here sehen.So instanziieren Sie eine generische rekursive Klasse in Java

Wie Sie die Klasse sehen kann, ist eine generische Klasse rekursiv wie folgt erklärt:

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

Wenn ich versuche, es zu instanziieren ich weiß nicht, wie es zu tun. Ich tue dies aber ich weiß, es ist nicht die Art und Weise, weil es kein Ende hat:

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

Ich hoffe, dass Sie meine Frage verstehen. Vielen Dank.

+0

Mai erklärte es abstrakt würde klar machen –

+0

@ArneBurmeister Genau mein Punkt! Es hilft überhaupt nicht, dass die Klasse "Node" nicht abstrakt ist. –

Antwort

4

Sie haben eine Klasse zu deklarieren, die Node erstreckt, so können Sie den Namen der Klasse verwenden:

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

Eine Möglichkeit ist Node wie zu verlängern:

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

und es dann instanziiert wie :

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

oder

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

Feine und flexible Art und Weise. – davidxxx

2

Sie einen Platzhalter in Ihre Variablendeklaration verwenden können:

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

Oder Sie eine explizite Unterklasse

class StringNode extends Node<String, StringNode> { } 

und instanziiert es über

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

oder

erstellen
StringNode n = new StringNode(); 
Verwandte Themen