|
|
1
3
最简单的解决方案是不强制执行
或
另一种解决方案是创建另一个类,将这3个类绑定在一起,并将交互调用移动到包装器。
或者让包装类获取这3个实例,并使用传入的版本。这基本上是“允许任何足够近的东西”的解决方案,并添加了另一个类来管理它们如何能够和不能相互对话。 预制检查如果强制转换设置无效,也可以对构造进行引用强制转换以引发错误。
下一个解决方案有点特定于您的案例(使用我们讨论中的信息)。基本上,您希望在抽象类中定义一个类a和B可以继承的方法,但a和B不应使用其基类进行互换。 只需使用polymophism,并将泛型用作类型分离器这里是MVCe的一个修改,它使用多态性,仅将泛型用作一种类型-类别-独占锁定机制。基本上,类型是一个语义接口,表示这些类是否在语义上相互对话是有意义的。(物理引擎和光引擎可能共享一些功能,但让它们互换是没有意义的。)
|
|
|
2
2
Java泛型中的递归类型参数通常很麻烦。
这里的问题是,矛盾的是,你无法保证这一点
显而易见的解决方案是添加一个cast(
另一种解决方案只是将这些方法签名更改为更灵活一点,而不是
编辑
如果你想保留
明显的不便之处在于参考的额外字段
在这里,我们添加了一种可能性,即引擎可以指定一个代理引擎用于其
不幸的是,这无法在编译时进行检查……您可以做的第二件事是将其作为代码测试的一部分,以验证所有
|