我正在使用一个Foo
提供这些方法的类:
String overloadedMethod(Object)
String overloadedMethod(Goo)
由于 Java 在 non-receiver 参数上静态分派,我不能只传递 my value
(这是一个Object
,但可能具有动态类型Goo
)并依赖 JVM 动态选择“正确”方法。
这是我目前(丑陋)的解决方法:
Object value = ...;
Foo foo = new Foo();
if (value instanceof Goo) {
Goo gooValue = (Goo) value;
return foo.overloadedMethod(gooValue); // -> overloadedMethod(Goo)
} else {
return foo.overloadedMethod(value); // -> overloadedMethod(Object)
}
有没有更好的方法可以在不修改Foo
(包含重载方法的类)中的代码的情况下做到这一点?