次の例を考えてみましょう。
class ClsA {}
class ClsB {}
interface IntA {}
interface IntB {}
そして、私は2つの非常によく似た方法を持っています:
static <T extends ClsA> T returnC() { // Here T extends the class
return null;
}
static <T extends IntA> T returnI() { // Here T extends the interface
return null;
}
そして、メソッドは次を呼び出します。
ClsA ac = returnC(); // This works fine based on inference.
IntA ai = returnI(); // Similarly this works fine based on inference.
ただし、以下の 2 を考慮してください。
ClsB bc = returnC(); // ERROR as expected.
日食エラー:
範囲の不一致: 型 Testing のジェネリック メソッド returnC() は、引数 () には適用できません。推論されたタイプ ClsB&ClsA は、制限付きパラメーターの有効な代替ではありません
<T extends ClsA>
しかし、次のコードは正常にコンパイルされます。
IntB bi = returnI(); // Works fine
インターフェイスの場合、バインドされたジェネリックが戻り値の型で考慮されないのはなぜですか?