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

标签 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
}

最佳答案

您可以更改返回类型ClassClass<? 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; 
}

关于java - 我可以声明返回 Class 对象的方法,但限制为 Java 中给定类型的子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16212727/

相关文章:

java - 如何为其他泛型类声明抽象泛型父类(super class)?

python - 如何使类似文件的类与 "isinstance(cls, io.IOBase)"一起工作?

java - 检测未安装的 java 并提供来自 Javascript 的链接

java - 我的列表仅在微调器中显示前两项

java - 自定义 'HTTP GET style' 请求的正则表达式

java - 无范围的 CDI 注入(inject) Bean

java - 如果缺少某些日期,如何反序列化?

java - 如何使用 Java 反射将数组写入 XML 文件?

c# - 通过表达式树从嵌套类获取静态字段

java - 如何使用java反射来确定基类字段的泛型类型