2017-11-20 1 views
0

Javaクラスに単純なTreeを実装しようとしています。しかし、私はこのツリークラスを拡張する別のクラスをしたい。Javaクラスが自己参照型クラスを継承しています

私はこのような木の再帰作ってるんだ:

class Tree<T> { 
    public T data; 
    public List<Tree<T>> children; 

    public Tree(T data){ 
     this.data = data; 
    } 
} 

はしかし、私はこのようなクラスを作ると言う:

class WeightedTree<T> extends Tree<T> 

それは子供たちが、すべての定期的な木ではなく、加重木あるのです。 OOP原則でこれを達成する方法はありますか?

Tree<String, ?> tree = new Tree<>(); 

それとも、自己の種類を抽象基底クラスを作ることができます:あなたはTreeをインスタンス化する必要がある場合は、ワイルドカードを使用することができます

class Tree<T, SELF extends Tree<T, SELF>> { 
    public T data; 
    public List<SELF> children; 
} 

class WeightedTree<T> extends Tree<T, WeightedTree<T>> {} 

答えて

2

あなたはこのような何かを行うことができますTreeWeightedTreeのサブクラスを分離します。

+0

ワイルドカードの例は機能しません。このようなタイプはインスタンス化できません。 – ruakh

+0

@ruakhそれが推測されていれば、あなたはすることができます。 – shmosel

+0

私の言葉は、あなたが正しいです!とても奇妙です。訂正してくれてありがとう。 :-) – ruakh

0
/* Package */ abstract class TreeBase<T, TREE_T extends TreeBase<T, TREE_T>> { 
    public T data; 
    public List<TREE_T> children; 

    public TreeBase(T data) { 
     this.data = data; 
    } 
} 

public class Tree<T> extends TreeBase<T, Tree<T>> { 
    public Tree(T data) { 
     super(data); 
    } 
} 

public class WeightedTree<T> extends TreeBase<T, WeightedTree<T>> { 
    public WeightedTree(T data) { 
     super(data); 
    } 
} 
関連する問題