首页 > 解决方案 > 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>

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

提前致谢!

标签: java

解决方案


您需要一个通用通配符:

Class<? extends abstractClass>

这是因为默认情况下泛型参数是不变的。您只能abstractClass.class在更改之前放入地图。

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


推荐阅读