java映射获取与抽象类的子类不兼容的类型

标签 java

我正在尝试创建这样的 map

Map<String, Class<abstractClass>> map = HashMap<String, Class<abstractClass>>();

对于它的输入,我尝试了

map.put("exampleString", childClass.class);

但这不起作用,IDE 说第二个参数类型错误。

Found: java.lang.Class<childClass>, required java.lang.Class<abstractClass>

尽管他们之间有继承关系。 有谁知道如何解决这个问题?

提前致谢!

最佳答案

您需要一个通用通配符:

Class<? extends abstractClass>

这是因为默认情况下泛型参数是不变的。你只能输入 abstractClass.class在更改之前的 map 中。

通过添加<? extends abstractClass> ,您正在使通用参数逆变。其他情况,您可以更改extendssuper来实现协方差。有一个缩写词可以记住何时使用 extends以及何时使用super ,称为 PECS .

关于java映射获取与抽象类的子类不兼容的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50732496/

相关文章:

java - 获取带有空检查的流以及使用 orElse() 和 orElseThrow() 进行集合的功能

java - 数据库池 - 在 Spring3 MVC 中连接到 Mysql 数据库

Java/Scala 以类型安全的方式获取 Field 引用

java - Spring Boot + Liquibase - 自定义 LockService 类

java - 正则表达式用于在没有被单引号或双引号包围时使用空格分割字符串

java - 检查数组中每个元素的开头

java - 在 Java 中返回字符串作为参数的最佳方法

java - 递归谢尔宾斯基三角形不递归

java - 将 BufferedImage TYPE_INT_RGB 转换为 OpenCV Mat 对象

java - 可执行 jar 启动后立即关闭 (Slick2D)