我有一棵树,我需要它看起来像这样树可以在节点中具有不同的通用类型。
Head(T holds a string object)
/ \
1st child (T MyClass object) 2nd Child (T MyOtherClass object)
我有一棵树,我需要它看起来像这样树可以在节点中具有不同的通用类型。
Head(T holds a string object)
/ \
1st child (T MyClass object) 2nd Child (T MyOtherClass object)
您可以使用一个联合类型,亦称Either
。下面是从javaslang实现:http://static.javadoc.io/io.javaslang/javaslang/2.0.2/javaslang/control/Either.html
这允许你有一个Tree<Either<A,B>>
,其中节点可以是A
类型或B
(包裹在Either
)的。但是,这只适用于两种类型。虽然您可以嵌套Either
(例如,三种类型的Either<A, Either<B,C>>
),但这种方法显然无法很好地扩展。
正如luk所说,如果您正在寻找一棵与您绘制出的树完全相同的树,您可以在您的类声明中使用三个泛型类型参数。
class ThreeTree<U, V, W> {
private U root;
private V left;
private W right;
}
不幸的是,如果你想要一个更大,更动态的树,这不会对你有所帮助。在这种情况下,您可以探索的一种可能的选择是使用类型安全的异构容器。这与建立一个对象树并将它们转换为想要获取的类型时并无太大区别,但您至少可以完成将不同类型放入树中的基本任务。
看看约书亚布洛赫的Effective Java,第5章有关泛型的更多想法。
如果您选择公共超类作为树的泛型类型参数,您可以。你可以定义一个具有3个泛型类型参数的树,一个用于根,一个用于左侧,另一个用于右侧子。 – luk2302