之间的类型不匹配?Map中的java.Object<;字符串,?gt<==&燃气轮机;map.put(“str”,new Object())

之间的类型不匹配?Map中的java.Object<;字符串,?gt<==&燃气轮机;map.put(“str”,new Object()),java,type-conversion,Java,Type Conversion,有人可以解释以下错误(来自eclipse IDE): 方法put(字符串、捕获#1-of?) 在类型映射中 不适用于参数 (字符串,对象) 代码第3行收到: public class MyTest { public void populateUserLoggedIn(Map<String, ?> model){ model.put( "test", new Object() ); } } 公共类MyTest{ 公共void populateUserL

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

方法put(字符串、捕获#1-of?) 在类型映射中 不适用于参数 (字符串,对象)

代码第3行收到:

public class MyTest {
    public void populateUserLoggedIn(Map<String, ?> model){
        model.put( "test", new Object() );
    }
}
公共类MyTest{
公共void populateUserLoggedIn(地图模型){
model.put(“test”,newobject());
}
}

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

模型
的值类型未定义,因此,编译器不能保证类型为
Object
的值是合适的。

对于将
作为参数的方法,与
Object
不等价。使用
Map
put
的签名是
put(String,?)
。对于
参数,只能传递
null

考虑这一点:

Map<String, Integer> map = new HashMap<String, Integer>();
myTest.populateUserLoggedIn(map);
Integer foo = map.get("test"); // ClassCastException
Map Map=newhashmap();
myTest.populateUserLoggedIn(地图);
整数foo=map.get(“test”);//类卡斯特例外

由于
populateUserLoggedIn
采用
Map
,因此可以将具有任何类型值的Map传入。。。因此,在方法中,您无法知道哪些类型作为值是合法的,哪些类型不是合法的。因此,您不能添加任何。

不等同于将
作为参数的方法的
对象。使用
Map
put
的签名是
put(String,?)
。对于
参数,只能传递
null

考虑这一点:

Map<String, Integer> map = new HashMap<String, Integer>();
myTest.populateUserLoggedIn(map);
Integer foo = map.get("test"); // ClassCastException
Map Map=newhashmap();
myTest.populateUserLoggedIn(地图);
整数foo=map.get(“test”);//类卡斯特例外
由于
populateUserLoggedIn
采用
Map
,因此可以将具有任何类型值的Map传入。。。因此,在方法中,您无法知道哪些类型作为值是合法的,哪些类型不是合法的。因此,您不能添加任何内容。

您应该阅读以下内容:

作为无界通配符的一个示例,
List
表示具有未知值的列表 对象类型。将此列表作为参数的方法可以采用任何类型的列表, 不管参数类型如何。从列表中读取将返回类型为
Object
的对象, 不允许将非null元素写入列表,因为参数类型为 不知道

您应该阅读以下内容:

作为无界通配符的一个示例,
List
表示具有未知值的列表 对象类型。将此列表作为参数的方法可以采用任何类型的列表, 不管参数类型如何。从列表中读取将返回类型为
Object
的对象, 不允许将非null元素写入列表,因为参数类型为 不知道