我正在尝试创建这样的 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>
,您正在使通用参数逆变。其他情况,您可以更改extends
至super
来实现协方差。有一个缩写词可以记住何时使用 extends
以及何时使用super
,称为 PECS .
关于java映射获取与抽象类的子类不兼容的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50732496/