у нас есть метод, более или менее похожий на следующий.
однако в настоящее время мы возвращаем список
которая в функции bla () вернет List<Bar>
во время выполнения.
Я ищу способ сделать оба
List<Interface> = troubleFuction(foo, bar.getCLass());;
и
List<Bar> = troubleFuction(foo, bar.getCLass());;
возможно.
в основном, я хочу вернуть список, который будет совместим с интерфейсом
однако это дает следующую ошибку
* Несоответствие типов: невозможно преобразовать из 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);
таким образом, этот тип возврата должен оставаться совместимым (перезапись / перефакторинг не возможен)
по сути, я хочу, чтобы метод возвращал List <? super Bar>
, если вызывается как
troublefunction(foo, Bar.class);
и
List<? super Foo>
при вызове
troublefunction(foo, Bar.class);