我正在使用一个名为 Foo
的类,它提供以下方法:
String overloadedMethod(Object)
String overloadedMethod(Goo)
由于Java在静态分派时基于非接收器参数,因此我不能仅仅传递我的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
中的代码?