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
在更改之前放入地图。
通过添加<? extends abstractClass>
,您正在使泛型参数逆变。在其他情况下,您可以更改extends
为super
以实现协方差。有一个用于记住何时使用extends
和何时使用的首字母缩写词super
,称为PECS。
推荐阅读
- angular - 按 ID 删除数据
- android - 为什么我不能将元素添加到地图数据类型(Dart/Flutter)
- java - 如何使用参数执行外部应用程序并接收结果
- apache-nifi - 检查 csv-header 是否正确
- java - 内存分配究竟是如何发生的,Java 和 C 如何交互以跟踪同一个对象?
- apache-spark - 如何在 Spark SQL 查询中使用 Interval 中的动态值
- javascript - 在jQuery中的函数中选择选中的单选按钮
- python - “utf-8”编解码器无法解码位置 87 word2vec gensim 中的字节 0xe3
- javascript - 背景的CSS剪辑路径问题
- c# - ac# DateTime 值是否可以设置为特定的无效值(如 double.NaN)?