如何创建一个泛型类的实例,该泛型类具有在其自己的类中扩展静态类的类型参数?
问题描述:
所以,我有一个通用类BinaryTree
,我用它作为源代码有一个类型参数为Node
(我通常看到T
)。这个类看起来是这样的:如何创建一个泛型类的实例,该泛型类具有在其自己的类中扩展静态类的类型参数?
public class BinaryTree<Node extends BinaryTree.BTNode<Node>> {
public static class BTNode<Node extends BTNode<Node>> {
public Node left;
public Node right;
public Node parent;
}
public BinaryTree(Node sampleNode) {
this.sampleNode = sampleNode;
}
//Some methods
}
通常情况下,(与我的其他泛型类),假定它传递类型到它的构造,我做这个调用它:
BinaryTree<Integer> myTree=new BinaryTree<Integer>(Integer.class);
当然,但这不起作用,因为它需要类型Node
,它扩展了BTNode
。我如何参考Node
延伸BTNode
,以便我可以创建一个BinaryTree
的实例?
答
如果更改BTNode
类的类型参数了一下,就有可能:
class BinaryTree<Node extends BinaryTree.BTNode>
{
static class BTNode<T> {
T value;
public BTNode<T> left;
public BTNode<T> right;
public BTNode<T> parent;
BTNode(T value) {
this.value = value;
}
}
private Node root;
public BinaryTree(Node node) {
root = node;
}
}
与用法:
class CustomNode extends BinaryTree.BTNode<Integer> {
CustomNode(Integer value) {
super(value);
}
}
BinaryTree<CustomNode> bt = new BinaryTree<>(new CustomNode(10));
没有尝试,但我认为你基本上只能使用BTNode那里。 – markspace