假设我声明一些抽象方法,它将返回 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
}
最佳答案
您可以更改返回类型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;
}
关于java - 我可以声明返回 Class 对象的方法,但限制为 Java 中给定类型的子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16212727/