我正在尝试将地图放入另一张地图。
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);
但我收到了这个:
方法put(String,capture#1-of?extends Map)在Map&gt;类型中。不适用于参数(String,Map)
Map<String,String>
与? extends Map<String,String>
不相同吗?
答案 0 :(得分: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
类型而非HashMap
,因为泛型不是协变的,这意味着右侧的通用类型指定的值必须与左侧的通用类型完全匹配手边宣言。
答案 1 :(得分:2)
如果您使用的是Java SE 7,请考虑使用菱形运算符:
Map<String, Map<String, String>> test = new HashMap<>();