次のように、Class オブジェクト (Dog.class、Cat.class など) を返す抽象メソッドを宣言するとします。
abstract public Class getProducedAnimalType();
この API を拡張するクライアントに、 Animal.class のサブクラスであるクラスを表す Class オブジェクトのみを返すように強制できますか? 何かのようなもの:
abstract public Class<representing subclass of Animal> getProducedAnimalType();
したがって、クラスを拡張するクライアントは次のように記述できません。
public Class getProducedAnimalType() {
// Integer not extends Animal!, shoud not compile!
return Integer.class;
}
ただし、次のことができます。
public Class getProducedAnimalType() {
return Fish.class; // Fish extends Animal
}