この質問はおそらく様々な方法で求められていますが、名前を知らない問題を探すのは難しいでしょう。したがって、最も簡単な方法は次のとおりです。Javaでバインドされたパラメータを持つ汎用オブジェクトを返す
class Digestable {}
class Mouse extends Digestable {}
class Cat extends Animal<Mouse> {}
class Animal<T extends Digestable> {
List<T> belly = new ArrayList<>();
void eat(T a) {
belly.add(a);
}
}
class main {
<T extends Digestable> Animal<T> returnAnimal() {
return new Cat(); <--- compiler error!
}
}
なぜコンパイラエラー?新しいCat()は、returnAnimal()の型とT型のDigestableを文字通り満たします。コンパイラがhirarchyの型をチェックできないのはなぜですか?
パラメータを満たしていません。もう一度見てください。 'Cat'は' Animal 'を拡張しますが、' T'は 'Mouse'以外のものでもあります。 –
@ user264235あなたが試したことを想像してみましょう: 'Animal a = returnAnimal()'、 'Rat'は' Digestable'のサブクラスです。何が起こるべきだと思いますか? –
shmosel