我有一個方法foo
如何從一個不可知的函數調用多態函數?
void foo (String x) { ... }
void foo (Integer x) { ... }
,我想從不關心參數的方法調用它:
void bar (Iterable i) {
...
for (Object x : i) foo(x); // this is the only time i is used
...
}
上面的代碼中抱怨說foo(Object)
沒有定義,並且當我想補充
void foo (Object x) { throw new Exception; }
然後bar(Iterable<String>)
調用,而不是foo(String)
和救援人員到場這是個例外。
如何避免使bar(Iterable<String>)
和bar(Iterable<Integer>)
有兩個文本相同的定義?
我想我應該能逃脫類似
<T> void bar (Iterable<T> i) {
...
for (T x : i) foo(x); // this is the only time i is used
...
}
但後來我得到cannot find foo(T)
錯誤。
HTTP的可能重複:// stackoverflow.com/questions/4086523/patterns-to-compensate-for-lack-of-runtime-method-lookup-based-on-polymorphic-ar – Alex