1

我正在尝试将地图放入另一个地图。

Map<String, ? extends Map<String, String>> test = new HashMap<String, HashMap<String, String>>();
Map<String, String> temp = new HashMap<String, String>();
test.put("foobar", temp);

但我收到这个:

Map> 类型中的 put(String, capture#1-of ? extends Map) 方法不适用于参数 (String, Map)

Map<String,String>一样? extends Map<String,String>吗?

4

2 回答 2

2

如果您使用的是 Java SE 7,请考虑菱形运算符:

Map<String, Map<String, String>> test = new HashMap<>();
于 2013-08-08T20:12:53.807 回答
2

外部Map test使用上限通配符值,以防止添加值,而Map temp不会添加。

你可以使用

Map<String, Map<String, String>> test = new HashMap<String, Map<String, String>>();
            ^                                               ^
            |-----changed LHS type--- must be matched with -|                                               

有界通配符语法Map<String, ? extends Map<String, String>>意味着Map使用扩展的某些未知类型的值Map。编译器会阻止除null添加之外的所有值。

另请注意,右侧的值具有Map类型而不是 a HashMap,因为泛型不是协变的,这意味着右侧分配值的泛型类型必须与左侧声明中的类型完全匹配。

于 2013-08-08T19:54:10.807 回答