から返します。以下のような方法があります。 しかし、私たちは現在、リスト を返しますが、関数bla()は実行時にList<Bar>
を返します。ジェネリック関数を汎用関数
私は両方
List<Interface> = troubleFuction(foo, bar.getCLass());;
と
List<Bar> = troubleFuction(foo, bar.getCLass());;
を可能にする方法を探しています。私は、それはインタフェースと互換性があるでしょうリストを返すようにしたい basicalyが しかし、これは次のようなエラーになります
*型の不一致は:可能この戻り値の型を作るためにどのような方法があるList<Interface>*
にList<capture#3-of ? extends Bar>
から変換することはできませんか既存のコードベースの多くで 方法が
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);
ので、この戻り値の型が互換性を保つ必要があります(書き換え/再要因オプションではありません)
基本的に私は
troublefunction(foo, Bar.class);
と List<? super Foo>
として呼び出された場合の方法は、リスト<? super Bar>
を返すようにしたいです
troublefunction(foo, Bar.class);
Javaでは、関数をメソッドと呼びます。 – eleven81
インターフェイスは予約語ではありませんか? –
ifaceはリストであるはずですか? –