0

次のように、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
}
4

2 に答える 2

1
public Class<? extends Animal> getProducedType() {
// return Integer.class; // compile time error: incompatible types
    return Dog.class;
}
于 2013-04-25T11:01:23.380 に答える
1

戻り型Classを に変更できますClass<? extends Animal>。次のコードでは、 と を返すことはできますが、 を返すCat.classことDog.classはできませんInteger.class

abstract public Class<? extends Animal> getProducedAnimalType();

クライアントは次のコードを記述でき、正常にコンパイルされます。

public Class<? extends Animal> getProducedAnimalType() 
{
   return Fish.class; // Fish extends Animal
}

ただし、次のコードはコンパイルされません。

public Class getProducedAnimalType() 
{
   return Integer.class; 
}
于 2013-04-25T10:51:40.607 に答える