戻り型パラメーターは、型パラメーターとメソッドパラメーターの型パラメーターの両方のスーパーである必要があります。
これはコンパイルします:
import java.util.List;
interface Foo<A> {
<R, B extends R> List<R> eg1(List<B> unit);
<R> List<R> eg2(List<? extends R> unit);
}
ただし、RがAのスーパーである必要があることを強制するものではありません。それ、どうやったら出来るの?
事実上、私はこれらで表現されているようなことをしたいと思っています。
<B, R super A & B> List<R> func(List<B> unit);
<B> List<? super A & B> func(List<B> unit);
もちろん、それらはコンパイルされません。
これには2つの目的があります。
- 結果をAとBの両方のスーパークラスに割り当てられるようにしたい。
- このメソッドの実装では、AとBの両方を含めることができる結果タイプが必要です。したがって、コンパイルを行う最初の例は、結果にAを入れることができないため、機能しません。