java – 使用List <?>成员定义抽象泛型类

即使试图为此提出一个干净的头衔也是一个挑战.

基本思想是定义两个超类:一个用于“子”项,其成员引用其“父”,另一个用于包含子对象的“父”列表.来自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
}

这是一团糟.我怀疑有一种更为简单,直接的方式,这可能是一个完全不同的方向.

解决方法

你的意思是ParentSub类扩展了ParentBase< ChildSub>?

如果你做了这个改变,它都会编译.

This is a mess. I SUSPECT that there is a much simpler,straightforward way of doing this and it’s probably in a totally different direction.

实际上,与我见过的仿制药使用的其他一些方法相比,这并不是那么糟糕.没有完全不同的方法可以实现这一目标.

唯一的选择(我认为你应该认真考虑)是使ChildBase和ParentBase非泛型,并在必要时使用强制转换.泛型被引入该语言,以帮助程序员编写正确的,类型安全的程序.当你的类之间有复杂或循环的关系时,弄清楚如何正确使用泛型变得如此困难和耗时,使用它们的好处根本就不存在.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...