我正在编写一个方法,该方法应该接受两种类型之一的对象作为其参数,这两种类型不共享 Object 以外的父类型。例如,类型是 Dreams 和 Garlic。您可以同时执行 dreams.crush()
和 garlic.crush()
。我想要一个方法 utterlyDestroy(parameter)
,它将接受 Dreams 和 Garlic 作为其参数。
utterlyDestroy(parameter) {
parameter.crush()
}
Garlic 和 dreams 都是某个库的一部分,因此让它们实现接口 ICrushable(这样我就可以编写 utterlyDestroy(ICrushable parameter)
)不是一种选择。
我的方法体很长,所以重载它意味着重复代码。丑陋的。我确信我可以使用反射并进行一些课堂黑客攻击。丑陋的。
我尝试使用泛型,但显然我不能写类似的东西
utterlyDestroy(<T instanceof Dreams || T instanceof Garlic> parameter)
是否可以将 Garlic 强制转换为 Dreams?
utterlyDestroy(Object parameter) {
((Dreams)parameter).crush()
}
不过,这仍然很难看。我的其他选择是什么?处理这种情况的首选方法是什么?
原文由 JohnEye 发布,翻译遵循 CC BY-SA 4.0 许可协议
这个怎么样:
新开发应实现 ICrushable 接口,但对于现有类,参数包装在 ICrushable 中并传递给完成所有工作的 utterlyDestroy(ICrushable)。