我使用的是類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
代碼的更好的辦法?