У нас есть метод более или менее похожий на следующий. однако мы в настоящее время возвращаем список который в функции bla() вернет List<Bar>
во время выполнения.Возврат родового типа от общей функции
Я ищу способ сделать как
List<Interface> = troubleFuction(foo, bar.getCLass());;
и
List<Bar> = troubleFuction(foo, bar.getCLass());;
возможно. basicaly я хочу, чтобы вернуть список, который был бы совместим с интерфейсом однако это дает следующую ошибку
* Несоответствие типа: не может конвертировать из List<capture#3-of ? extends Bar>
в List<Interface>*
есть ли способ, чтобы сделать этот тип возврата можно или это время выполнения стирания делает это невозможным
public <T1 extends Interface, T2 extends Interface> List<"problem"> troubleFunction(T1 in, Class<T2> clazz) {
return in.doStuffWhichGeneratesAlistOF(clazz)
}
public void bla() {
Foo foo = new Foo(); // implements interface
Bar bar = new Bar(); // implements interface
List<Interface> ifaces = toubleFuction(foo, bar.getCLass());
List<Bar> mustAlsoWork = toubleFuction(foo, bar.getCLass());
}
редактировать: в много существующей базы кода метод вызывается как
List<Bar> result = troubleFunction(List<Interface> list, Bar.class);
, таким образом, этот тип возвращаемого значения должен остаться совместимым (переписать/переделан это не вариант)
по существу я хочу способ вернуть список <? super Bar>
если называется
troublefunction(foo, Bar.class);
и List<? super Foo>
когда
troublefunction(foo, Bar.class);
В Java функция называется методом. – eleven81
Интерфейс не зарезервированное слово? –
iface должен быть списком? –