有人可以解释以下错误(来自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() );
}
}
答案 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
类型的对象, 并且不允许将非空元素写入列表,因为参数类型是 不知道。