2017-11-03 3 views
0

그래서 일반적으로 (보통은 T으로 표시됨)이라는 유형 매개 변수를 가진 소스 코드로 사용되는 일반 클래스 BinaryTree이 있습니다. 클래스는 다음과 같은 :자체 클래스 내에서 정적 클래스를 확장하는 형식 매개 변수가있는 일반 클래스의 인스턴스를 만드는 방법은 무엇입니까?

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

그러나 물론을 이것은 BTNode을 확장하는 유형 Node을 원하는대로 작동하지 않습니다. NodeBTNode까지 확장하여 참조 할 수 있도록 BinaryTree의 인스턴스를 만들 수 있습니까? 당신이 BTNode 클래스의 형식 매개 변수를 변경하는 경우

+1

BTNode 거기. – markspace

답변

0

조금, 그것은 가능하다 :

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)); 
그것을 시도하지만 난 당신이 기본적으로 만 사용할 수 있습니다 생각하지 않았다