2016-09-28 17 views
0

今私は実装していますTree<T>抽象クラス(<T>は、ルートノードのデータ値を参照)、現在はこのようなものがあります:あなたのようJavaの抽象クラス/インタフェースと指定型パラメータ

public abstract class Tree<T> { 
    public void setChild(int index, ??? childTree); 
    public void deleteChild(int index, ??? childTree); 
    public T getData(); 
    public void setData(T value); 
} 

を見ることができる、私は問題を子木のための正しいタイプを考え出している。理想的には、私はこの

public abstract class Tree<T> { 
    public void setChild(int index, ImplementingClass childTree); 
    public void deleteChild(int index, ImplementingClass childTree); 
    ... 
} 

ような何かをしたいしかし、私は(おそらくドキュメントを再読み込みしようとして)これを実行するかどうかはわかりません。私が考えている現在のソリューションは、この

public abstract class Tree<T, C extends Tree> { 
    public void setChild(int index, C childTree); 
    public void deleteChild(int index, C childTree); 
    ... 
} 

のようなものです。しかし、より正確な解決策は、子ツリーは現在のツリーと同じクラスなければならないことを指定することです。これをJavaで指定する方法はありますか?

+0

何が 'T'ですか? – sidgate

+0

Javaには自己タイプはありません。あなたが心に持っているものは大抵正しいと思われます。 'Tree >'でなければなりません。 – shmosel

+0

本当に同じ実装にする必要はありますか?十分なパラメータとして 'Tree 'を持っていないのですか? –

答えて

-1
Tree<T> 

意志がタイプT

Tree<String> tree; 

Tは、他のジェネリック型の記述可能性があり

Tree<Tree<String>> 

次に、あなたがそれからTのオブジェクトを追加または削除

Public void setChild(int index, T child); 
public void deleteChild(int index, T child); 

のオブジェクトが含まれています指定したい場合Tをより限定的な型に変更する場合

<T extends class> 
<T implements interface> 
<T super class> 

最初の例では、実装を実装していない場合は、抽象クラスをインタフェースに変更します。

クラスは1度だけ継承することができるが、複数のインターフェイスを実装できることを覚えておいてください。

+0

ああ、ジェネリック型の 'T'はルートノードのデータ値を参照しておきたいと思います。データ値自体を子ツリーにすることは、既に子ツリーのリスト/コレクションを持っているので混乱します。 – Rdesmond

+0

okあなたはTree の子ツリーが同じルートタイプを持っていますか?多分Tree > – Tokazio

関連する問題