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