Map <String,Map <String,Boolean >> myMap = new HashMap <String,HashMap <String,Boolean >>();

Nim*_*sky 4 java nested hashmap map

为什么这不适用于java,但确实如此

Map<String, Map<String, Boolean>> myMap = new HashMap<String,Map<String,Boolean>>();
Run Code Online (Sandbox Code Playgroud)

只是为了澄清下面对嵌套HashMap的更改显示了编译器错误,而上面并没有; 用地图(不是hashmap)

Map<String, Map<String, Boolean>> myMap = new HashMap<String,HashMap<String,Boolean>>();
Run Code Online (Sandbox Code Playgroud)

Pét*_*rök 10

这是因为在Java泛型是不变的,也就是说,即使B类是A,一个Collection<B>不是一个Collection<A>.

这是有充分理由的.如果你的例子合法,那么这是可能的:

Map<String, HashMap<String, Boolean>> myHashMap = new HashMap<String,HashMap<String,Boolean>>();
Map<String, Map<String, Boolean>> myMap = myHashMap;
myMap.put("oops", new TreeMap<String, Boolean>());
HashMap<String, Boolean> aHashMap = myMap.get("oops"); // oops - ClassCastException!
Run Code Online (Sandbox Code Playgroud)


Bor*_*vić 5

在第二种情况下myMap是一个映射,其中键是类型String,值是类型Map<String, Boolean>.HashMap<String, Boolean>不是Map<String, Boolean>它实现它.因此,这将编译:

Map<String, ? extends Map<String, Boolean>> myOtherMap = 
    new HashMap<String,HashMap<String,Boolean>>();
Run Code Online (Sandbox Code Playgroud)