假设我声明了一些抽象方法,它将返回Class对象(如Dog.class,Cat.class),如下所示:
abstract public Class getProducedAnimalType();
我可以强制扩展此API的客户端只返回表示类的Class对象,它们是Animal.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
}
答案 0 :(得分: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;
}
答案 1 :(得分:1)
public Class<? extends Animal> getProducedType() {
// return Integer.class; // compile time error: incompatible types
return Dog.class;
}