演员地图<String ,? 将Object>扩展为Map <String,Object>

Ant*_*nin 5 java generics casting

在Java 8中,我试图Map<String, ? extends Object>转向Map<String, Object>.我认为,鉴于我对输入Type的约束(所有?必须实现Object),它会是安全的,但我得到一个未经检查的强制警告.

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

Wor*_*der 5

演员阵容不安全.特别是:

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

Map<String, Object> after;
after.put("foo", "example"); // <-- legal
Run Code Online (Sandbox Code Playgroud)

观察它String不是一个子类,? extends Object因为你不知道,?但它是更通用的子类,Object因此第二个调用是可以的.