我正在尝试传递类型的变量:
HashMap<Foo, HashSet<Bar>>
到一个方法,它期望:
Map<Foo, Set<Bar>>
我认为它应该可行,但我收到以下编译错误:
java: method setMenu in class com.xx.client.layout.Layout cannot be applied to given types;
required: java.util.Map<com.xx.shared.model.UserType,java.util.Set<com.xx.shared.dto.model.MenuItemDTO>>
found: java.util.HashMap<com.xx.shared.model.UserType,java.util.HashSet<com.xx.shared.dto.model.MenuItemDTO>>
reason: actual argument java.util.HashMap<com.xx.shared.model.UserType,java.util.HashSet<com.xx.shared.dto.model.MenuItemDTO>>
cannot be converted to
java.util.Map<com.xx.shared.model.UserType,java.util.Set<com.xx.shared.dto.model.MenuItemDTO>>
by method invocation conversion
答案 0 :(得分:2)
试图说服你,给出一个
HashMap<Foo, HashSet<Bar>> myMap;
你希望做到
HashSet<Bar> aHashSet = myMap.get(aFoo);
但如果你有
public void someMethod(Map<Foo, Set<Bar>> aMapParameter) {...}
和预期
someMethod(myMap);
开始工作,然后someMethod
就可以了
public void someMethod(Map<Foo, Set<Bar>> aMapParameter) {
aMapParameter.put(aFoo, new TreeSet<>());
}
你原来的
HashSet<Bar> aHashSet = myMap.get(aFoo);
会因ClassCastException
而失败。
编译时间类型安全必须保证不会发生这种情况。因此编译器不允许该方法调用。
相关: