2016-07-11 11 views
0

Ich habe einen Baum, den ich es brauche diese aussehen wieKann ein Baum verschiedene generische Typen in Knoten haben.

    Head(T holds a string object) 

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

Wenn Sie die allgemeine Oberklasse als generischen Typparameter des Baums wählen, können Sie. Und Sie können einfach einen Baum mit 3 generischen Typparametern definieren, einen für den Stamm, einen für den linken und einen für das rechte Kind. – luk2302

Antwort

0

Sie einen Union-Typen verwenden, auch bekannt als Either. Hier ist die Implementierung von javaslang: http://static.javadoc.io/io.javaslang/javaslang/2.0.2/javaslang/control/Either.html

Dies ermöglicht Ihnen ein Tree<Either<A,B>> zu haben, wo Knoten vom Typ sein können A oder B (eingewickelt in Either). Dies funktioniert jedoch nur für zwei Arten. Während Sie Either s (z. B. Either<A, Either<B,C>> für drei Typen) verschachteln können, skaliert dieser Ansatz eindeutig nicht gut.

0

Wie der Kommentar von luk sagt, können Sie drei generische Typparameter in Ihrer Klassendeklaration haben, wenn Sie nach einem Baum suchen, der genau so aussieht, wie Sie ihn gezeichnet haben.

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

Leider ist dies hilft Ihnen nicht, wenn Sie einen größeren, dynamischen Baum wollen. Eine mögliche Option, die Sie in diesem Fall untersuchen können, ist die Verwendung typensicherer heterogener Container. Dies wäre nicht viel anders als einen Baum von Objekten zu haben und sie in den gewünschten Typ zu bringen, wenn Sie es wollen, aber Sie werden zumindest in der Lage sein, die grundlegende Aufgabe zu erfüllen, verschiedene Typen in den Baum zu setzen.

Werfen Sie einen Blick auf Joshua Bloch Effective Java, Kapitel 5 für einige weitere Gedanken zu Generika.

Verwandte Themen