如何创建具有类型参数的泛型类的实例,该类参数在其自己的类中扩展静态类?

时间:2017-11-03 22:45:56

标签: java generics instance

所以,我有一个泛型类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的实例?

1 个答案:

答案 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));