所以,我有一个泛型类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
的实例?
答案 0 :(得分:0)
如果稍微更改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));