Java的泛型问题

时间:2013-08-26 08:06:24

标签: java generics map

这是我的代码段:

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?extends Object)不适用于参数(String,LinkedList)

有没有人知道为什么?只要LinkedListObject的子类型,我认为错误没有任何理由出现。我在哪里误解了这个问题?

1 个答案:

答案 0 :(得分:10)

generics 类型指定为

Map<String, Object> data = this.aub.getData();
data.put("ip_macs", new LinkedList<Object>()); // Compiles

当您说Map<String, ? extends Object>时,它表示Map,其密钥的类型为String,值为Object,但其类型为 unknown ?。因为,类型未知,在那里插入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!

如果允许这样做,你只是规避了仿制药提供的类型安全性。