2017-05-10 16 views
8

Vấn đề của tôi là tôi đang sử dụng một lớp không được phát triển bởi tôi (tôi lấy nó từ Microsoft Azure SDK cho Java). Lớp được gọi là Node và bạn có thể thấy nó here.Làm thế nào để khởi tạo một lớp đệ quy chung trong Java

Như bạn có thể nhìn thấy lớp là một lớp chung tuyên bố đệ quy như thế này:

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

Khi tôi cố gắng nhanh chóng nó tôi không biết làm thế nào để làm điều đó. Tôi đang làm điều này nhưng tôi biết CNTT KHÔNG PHẢI vì nó không có kết thúc:

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

Tôi hy vọng bạn hiểu câu hỏi của tôi. Cảm ơn.

+0

Có thể tuyên bố tóm tắt sẽ làm rõ –

+0

@ArneBurmeister Chính xác quan điểm của tôi! Nó không giúp gì cả khi lớp 'Node' không trừu tượng. –

Trả lời

4

Bạn phải khai báo một lớp mà kéo dài Node vì vậy bạn có thể sử dụng tên của lớp:

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

Một cách là mở rộng Node như:

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

và sau đó nhanh chóng nó như :

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

hoặc

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

Cách tốt và linh hoạt. – davidxxx

2

Bạn có thể sử dụng một ký tự đại diện trong việc kê khai biến của bạn:

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

Hoặc bạn có thể tạo một lớp con rõ ràng

class StringNode extends Node<String, StringNode> { } 

và nhanh chóng nó qua

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

hoặc

StringNode n = new StringNode(); 
Các vấn đề liên quan