0

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

2 回答 2

1

您可以将返回类型更改ClassClass<? extends Animal>. 以下代码将允许返回Cat.classand 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 回答
1
public Class<? extends Animal> getProducedType() {
// return Integer.class; // compile time error: incompatible types
    return Dog.class;
}
于 2013-04-25T11:01:23.380 回答