将地图<string,?=“”extends =“”object =“”>转换为Map <string,object =“”>

时间:2018-04-04 16:17:54

标签: java generics casting

在Java 8中,我正在尝试将Map<String, ? extends Object>投射到Map<String, Object>。我认为考虑到输入类型的约束(所有?必须实现Object),它会是安全的,但我得到一个未经检查的强制警告。

知道我错的地方吗?有清洁的解决方案谢谢你的帮助!

1 个答案:

答案 0 :(得分:5)

此演员表不安全。特别是:

Map<String, ? extends Object> before;
before.put("foo", "example"); // <-- illegal

Map<String, Object> after;
after.put("foo", "example"); // <-- legal

观察String不是? extends Object的子类,因为您不知道?,但它是更一般Object的子类,因此第二个电话没问题。