Java的泛型问题

Artaxerxe

这是我的代码段:

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,我认为该错误没有任何理由出现。在哪里我会误解这个问题?

拉维(Ravi K Thapliyal)

泛型类型指定

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章