java - java中奇怪的编译错误

标签 java

我正在尝试传递以下类型的变量:

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

最佳答案

试图说服你,给出一个

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

编译时类型安全必须保证这种情况不会发生。因此编译器不允许该方法调用。

相关:

关于java - java中奇怪的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22951210/

相关文章:

java - 在 Kotlin 代码之间编写 java 代码

java - 如何在java中的方法内部使用类中的变量

java - Java 中的子进程再次出现问题

java - 对于单个元素列表使用 java.util.List 的开销是多少?

java - 从链表中删除矩形对象

java - Hibernate 与 MySQL 插入查询不一致

java - 新的二进制 XML 文件行 #19 : Error inflating class activity

java - 英特尔 MKL 和 JNI : How to add a shared library that ld searches symbols from?

java - 从命令行通过 stdin 访问 Java 应用程序

java - 我想知道如何询问用户他/她是想继续使用这个程序还是使用 do while 循环终止它?