gpt4 book ai didi

java - 接受两种不同类型作为参数的方法

转载 作者:IT老高 更新时间:2023-10-28 21:18:18 27 4
gpt4 key购买 nike

我正在编写一个方法,它应该接受两个类型之一的对象作为其参数,这两种类型的对象除了 Object 之外不共享父类型。例如,类型是 Dreams 和 Garlic。 dreams.crush()garlic.crush() 都可以。我想要一个方法 utterlyDestroy(parameter),它可以接受 Dreams 和 Garlic 作为其参数。

utterlyDestroy(parameter) {
parameter.crush()
}

Garlic 和 Dreams 都是某个库的一部分,因此不能让它们实现接口(interface) ICrushable(这样我就可以编写 utterlyDestroy(ICrushable parameter) )。

我的方法体很长,所以重载意味着重复代码。丑陋的。我确信我可以使用反射并进行一些类黑客攻击。丑。

我尝试使用泛型,但显然我不能写类似的东西

utterlyDestroy(<T instanceof Dreams || T instanceof Garlic> parameter)

是否可以将 Garlic 类型转换为 Dreams?

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 接口(interface),但对于现有的类,参数被包装在 ICrushable 中并传递给完成所有工作的 utterlyDestroy(ICrushable)。

关于java - 接受两种不同类型作为参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777384/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com