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



假设我声明一些抽象方法,它将返回class对象(如Dog.class, Cat.class),如下所示:

abstract public Class getProducedAnimalType();

我可以强制客户端扩展这个API只返回代表类的类对象,这是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
}

可以将返回类型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; 
}
public Class<? extends Animal> getProducedType() {
// return Integer.class; // compile time error: incompatible types
    return Dog.class;
}

相关内容

  • 没有找到相关文章

最新更新