我可以声明方法来返回Class对象,并限制Java中给定类型的子类吗?

时间:2013-04-25 10:46:56

标签: java class reflection types return-value

假设我声明了一些抽象方法,它将返回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
}

2 个答案:

答案 0 :(得分:1)

您可以将返回类型Class更改为Class<? extends Animal>。以下代码将允许返回Cat.classDog.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;
}