【发布时间】:2013-05-05 13:17:33
【问题描述】:
在我有“父子对象”概念的系统中,我曾尝试过多地使用参数以提供完整的类型安全性。我可能不会保持这种级别的参数化,因为编写参数变得如此丑陋。但是我在概念上是这样的:
ModelObject<BaseType extends ModelObject<BaseType, ChildType>, ChildType extends ModelObject<ChildType,?>>
{
abstract Set<ModelObject<?, BaseType>> getParents();
//other logic
}
这是简化版,原版指定了父类以及基类和子类,使事情更明确,更丑陋。
假设我确实保留了所有这些,主要的弱点是它只允许孩子有一种类型的父母,每个父母只有一种类型的孩子,有时父母有两个孩子是有意义的。虽然我现在完全没有用它,但理论上说生 3 个以上的孩子也是有意义的。
我可以让两个孩子有一个接口,比如
MyObject extends ModelObject<MyObject, ChildA> implements hasChild<childB>
但显然这只适用于两个孩子,除非我想为“有 2 个孩子,有 3 个孩子”等制作一堆接口。
有什么方法可以编写一个通用抽象类,允许以某种方式创建任意数量的“子”参数,以便我可以编写与任何潜在“子”列表匹配的子对象?我怀疑答案是否定的,但我很好奇。整个结构可能不会因为所有类型的浮动而过于严格和有点丑陋;但是为了好玩而涉足它,看看它是否可以完成:)
【问题讨论】:
-
我很困惑,你是想用类代替对象,用泛型代替集合吗?