【发布时间】:2016-02-14 11:51:16
【问题描述】:
即使为此想出一个干净的标题也是一个挑战。
基本思想是定义两个超类:一个用于“子”项,其成员引用其“父”,另一个用于包含子对象的“父”列表。 child->parent 和 parent->child 的链接是对称的。每个父/子超类都有定义和实现附加功能的子类。总是有一个并行的子类,这样child<A> 与parent<A> 配对。也就是说,parent<A> 将仅包含 child<A> 引用,而 child<A> 将仅引用 parent<A> - 子类型之间没有“交叉”。
我该如何表示?我已经坚持了好几天了,我对多层嵌套泛型类型越有创意,它就越糟糕。这就是我想做的:
abstract class ChildBase<T extends ChildBase<T>> {
ParentBase<T> parent;
}
abstract class ParentBase<T extends ChildBase<T>> {
LinkedList<T> childList;
}
class ChildSub extends ChildBase<ChildSub> {
// ... class specific stuff
}
class ParentSub extends ParentBase<ChildSub> {
// ... class specific stuff
}
这是一团糟。我怀疑有一种更简单、直接的方法可以做到这一点,而且可能是完全不同的方向。
【问题讨论】:
-
我很想知道您为什么需要
T来扩展ChildBase?这些类中是否会有一些方法要求它们是ChildBase?获取节点的兄弟姐妹就是一个例子。如果没有,那么您可以显着简化结构。 -
正如@sprinter 所说,也许需要深入了解您的问题域才能提供更好的设计。考虑更详细地描述所描述的类的应用。
-
您是否尝试过寻找基于接口的解决方案而不是继承?就我个人而言,我发现如果你只是解耦类而不是更多地耦合它们,很多这些问题会更容易解决。
标签: java generics inheritance