我已经看到了关于这个主题的几个问题,但仍然无法弄清楚如何解决这个问题。我将变量定义并初始化为:
Queue<? extends Map<String, String>> q = new LinkedList<HashMap<String, String>>();
它编译。但那时:
Map<String, String> m = new HashMap<String, String>();
m.put("foo", "bar");
q.add(m);
报告编译错误:no suitable method found for add(Map<String,String>)
。
编辑:
我认为这与Can't add value to the Java collection with wildcard generic type不同,因为泛型不会嵌套在该问题中。
此外,接受的答案教导在某些声明中可以省略模板类的具体实现。你不会在标记为重复的问题上找到这种教学。
答案 0 :(得分:0)
?
表示&#34;未知类型&#34;。由于类型未知,编译器无法保证类型为Map<String, String>
。所以它拒绝让你在队列中添加任何东西,因为它可能会损害它的类型安全性。
您的变量应声明为
Queue<Map<String, String>> q = new LinkedList<Map<String, String>>();
或简单地说,如果您使用的是Java 7或更高版本
Queue<Map<String, String>> q = new LinkedList<>();