这是我的代码段:
Map<String, ? extends Object> data = this.aub.getData();
//... some code ...
data.put("ip_macs", new LinkedList<Object>()); //gets error
我在标出的行出现的错误是(该消息来自Eclipse IDE):
Map类型的put(String,capture#3-of?extended Object)方法不适用于参数(String,LinkedList)
有谁知道为什么吗?只要LinkedList
是的子类型Object
,我认为该错误没有任何理由出现。在哪里我会误解这个问题?
将泛型类型指定为
Map<String, Object> data = this.aub.getData();
data.put("ip_macs", new LinkedList<Object>()); // Compiles
当您说Map<String, ? extends Object>
这意味着Map
其键的类型是键String
且值扩展Object
但其类型未知时 ?
。由于类型未知,因此在其中插入LinkedList
对象是不安全的。
基本上,编译器试图防止这种情况:
Map<String, String> mapOfStrings = new HashMap<String, String>();
mapOfStrings.add("string", "value");
Map<String, ? extends Object> map = mapOfStrings; // Compiles
map.add("string", 1); // ERROR!
如果允许这样做,您就可以绕过泛型提供的类型安全性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句