代码之家  ›  专栏  ›  技术社区  ›  David Parks

类型不匹配?以及Map<String中的java.Object,?><==>map.put(“str”,new Object())

  •  0
  • David Parks  · 技术社区  · 14 年前

    方法put(String,capture#1-of?) 在类型映射中 不适用于参数

    在代码爆炸的第3行收到:

    public class MyTest {
        public void populateUserLoggedIn(Map<String, ?> model){
            model.put( "test", new Object() );
        }
    }
    
    3 回复  |  直到 14 年前
        1
  •  3
  •   ColinD    14 年前

    ? 不等于 Object ? 作为参数。用一个 Map<String, ?> ,签名 put put(String, ?) . 除了 null ? 参数。

    考虑一下:

    Map<String, Integer> map = new HashMap<String, Integer>();
    myTest.populateUserLoggedIn(map);
    Integer foo = map.get("test"); // ClassCastException
    

    populateUserLoggedIn 拿一个 ,可以传入具有任何类型值的映射。。。因此,在这个方法中,您无法知道哪些类型作为值是合法的还是不合法的。因此,不能添加任何内容。

        2
  •  1
  •   Steve Emmerson    14 年前

    值的类型 model 未定义,因此编译器无法保证 Object 将是适当的。

        3
  •  1
  •   user180100 user180100    14 年前

    你应该看看这个 paragraph :

    作为无限通配符的一个例子, List<?> 对象类型。以这样一个列表作为参数的方法可以采用任何类型的列表, Object , 不允许将非空元素写入列表,因为参数类型是