类型不匹配?和Map中的java.Object <string,?>&lt; ==&gt; map.put(“str”,new Object())</string,?>

时间:2010-10-29 04:50:56

标签: java type-conversion

有人可以解释以下错误(来自eclipse IDE):

  

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

在代码打击的第3行收到:

public class MyTest {
    public void populateUserLoggedIn(Map<String, ?> model){
        model.put( "test", new Object() );
    }
}

3 个答案:

答案 0 :(得分:3)

对于以?为参数的方法,

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需要Map<String, ?>,因此可以传入包含任何类型值的地图...因此在该方法中,您无法知道哪些类型是合法的或不合法的值。因此,您无法添加任何内容。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您应该阅读此paragraph

  

作为无界通配符的示例,List<?>表示具有未知的列表   对象类型。将这样的列表作为参数的方法可以采用任何类型的列表,   不管参数类型如何。从列表中读取将返回Object类型的对象,   并且不允许将非空元素写入列表,因为参数类型是   不知道。