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

问题描述:

所以,我有一个通用类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

没有尝试,但我认为你基本上只能使用BTNode那里。 – markspace

如果更改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));