接受两种不同类型作为参数的方法
我正在写一个方法,该方法应接受不共享除父对象以外的父类型的两种类型之一的对象作为其参数。例如,类型为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)
是否有可能将大蒜浇铸成梦想?
utterlyDestroy(Object parameter) { ((Dreams)parameter).crush()
}
但是,这仍然很丑陋。我还有其他选择吗?处理这种情况的首选方法是什么?
回答:
这个怎么样:
interface ICrushable { void crush();
}
utterlyDestroy(ICrushable parameter) {
// Very long crushing process goes here
parameter.crush()
}
utterlyDestroy(Dreams parameter) {
utterlyDestroy(new ICrushable() { crush() {parameter.crush();});
}
utterlyDestroy(Garlic parameter) {
utterlyDestroy(new ICrushable() { crush() {parameter.crush();});
}
新的开发应该实现ICrushable接口,但是对于现有的类,该参数被包装在ICrushable中,并传递给utterlyDestroy(ICrushable)来完成所有工作。
以上是 接受两种不同类型作为参数的方法 的全部内容, 来源链接: utcz.com/qa/399978.html