我有这段代码无法在OpenJDK Linux上编译,但在Windows上没有编译Oracle JDK,1.7(Linux - 特别是javac 1.7.0_79):
OS是一个枚举,Path也是一个枚举。
public static Map<OS, Map<Path, String>> paths = new HashMap<>();
...
paths.put(OS.WINDOWS, new HashMap<>()); // FAIL ON OPEN JDK!!!!
我收到了这个错误:
required: OS,Map<Path,String>
found: OS,HashMap<Object,Object>
reason: actual argument HashMap<Object,Object> cannot be converted to Map<Path,String> by method invocation conversion
如果我不依赖于类型推断并直接输入泛型,那就可以了。
public static Map<OS, Map<Path, String>> paths = new HashMap<OS, Map<Path, String>>();
...
paths.put(OS.WINDOWS, new HashMap<Path, String>()); // NOT FAIL ON OPENJDK
这是一个错误,还是OpenJDK的旧版本?
修改: 问题解决了! 在Windows上,我使用Java 8进行目标类型推断。谢谢shmosel。