考虑这段代码,其中有两个映射,分别是Map<String, Integer>
和Map<String, String>
。我将第二个分配给一个对象,然后将此对象转换为一个Map,这样我就可以将所有此映射放到第一个。
Map<String, Integer> map = new HashMap<>();
map.put("one", 1);
Map<String, String> otherMap = new HashMap<>();
otherMap.put("two", "two");
Object obj = otherMap;
map.putAll((Map<String,Integer>)obj);
Assert.assertFalse(map.get("two") instanceof Integer);
Assert.assertEquals("{one=1, two=two}", map.toString());
第一个断言确保我的Map的第二个元素不是整数,那么putAll为何不会失败?
这里的第二个断言是jus,它表明该地图没有明显问题。
当映射首次分配给Object时,如何确保putAll方法失败?
谢谢
最佳答案
泛型是编译时功能,不会在运行时强制执行。您的代码将编译时带有未经检查的警告,告诉您确切的信息:您的代码可能行为异常。
为了大大简化,所有Map
在运行时都被视为Map<Object, Object>
。 (不是真的,但是有点。)
关于java - 将错误类型的对象放入 map ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33765010/