У меня есть метод 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