2016-07-11 14 views
0

私はあなたがEither別称、労働組合のタイプを使用することができ、それはこのノードは、ノード内で異なるジェネリック型を持つことができます。

    Head(T holds a string object) 

       /      \ 
1st child (T MyClass object)  2nd Child (T MyOtherClass object) 
+0

ツリーのジェネリック型パラメータとして共通のスーパークラスを選択すると、可能です。そして、3つのジェネリック型パラメータを持つツリーを定義することができます。一つはルート、もう一つは右の子です。 – luk2302

答えて

0

のように見える必要がある木を持っています。ここでjavaslangから実装です:http://static.javadoc.io/io.javaslang/javaslang/2.0.2/javaslang/control/Either.html

これは、ノードがタイプAまたはBのものであってもよいTree<Either<A,B>>は、(Eitherに包まれた)持つことができます。ただし、これは2つのタイプに対してのみ機能します。 Eitherを入れ子にすることはできますが(3種類の場合はEither<A, Either<B,C>>)、このアプローチは明らかに拡大縮小できません。

0

コメントがlukから示唆しているように、あなたが引き出したのとまったく同じツリーを探しているなら、クラス宣言に3つのジェネリック型パラメータを持つことができます。

class ThreeTree<U, V, W> { 
    private U root; 
    private V left; 
    private W right; 
} 

あなたが大きく、よりダイナミックなツリーが必要な場合は残念ながら、これはあなたを助けていません。このケースでは、タイプセーフな異種コンテナを使用して探索することができます。これは、オブジェクトのツリーを持ち、あなたが望むときにそれらをあなたが望むタイプにキャストすることと大きく異なるわけではありませんが、少なくとも異なるタイプをツリーに入れるという基本的な作業を少なくとも達成することができます。

Joshua BlochのEffective Javaの第5章でジェネリックの考えをもう少し見てみましょう。

関連する問題