考虑这段代码,其中有两个映射,分别是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/

10-11 22:23
查看更多