ags*_*ags 7 java generics inheritance
即使试图为此提出一个干净的头衔也是一个挑战.
基本思想是定义两个超类:一个用于"子"项,其成员引用其"父",另一个用于包含子对象的"父"列表.来自child-> parent和parent-> child的链接是对称的.每个父/子超类都有子类,用于定义和实现其他功能.总是有一个并行子类,以便子对与父对子.也就是说,父级只包含子引用,而子级只引用父级 - 子类型之间没有"交叉".
我怎么能代表这个呢?我已经坚持了好几天,而且我对多级嵌套泛型类型的创造性越强,它就越糟糕.这就是我想做的事情:
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
}
这是一团糟.我怀疑有一种更为简单,直接的方式,这可能是一个完全不同的方向.
你的意思class ParentSub extends ParentBase<ChildSub>?
如果您进行这一更改,则一切都会编译。
这真是一团糟。我怀疑有一种更简单、更直接的方法可以做到这一点,而且可能是一个完全不同的方向。
实际上,与我见过的泛型使用的其他一些方法相比,这根本没有那么糟糕。没有什么完全不同的方法可以实现您所缺少的。
唯一的选择(我认为你应该认真考虑)是 makeChildBase和ParentBase非泛型,并在必要时使用强制转换。语言中引入泛型是为了帮助程序员编写正确的、类型安全的程序。当类之间存在复杂或循环关系时,弄清楚如何正确使用泛型就会变得非常困难和耗时,以至于根本不存在使用它们的好处。