【发布时间】:2012-06-02 09:24:26
【问题描述】:
我正在编写一个方法,它应该接受两个类型之一的对象作为其参数,这两种类型的对象除了 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()
}
但这仍然很丑陋。我还有哪些其他选择?处理这种情况的首选方法是什么?
【问题讨论】:
标签: java generics polymorphism overloading