这是我的代码示例:
private static void fac(Map<? extends Serializable,? extends Serializable> mapTo){
//do sth.
}
public static void main(String[] args) {
Map<String,Object> mapFrom=null;
fac((Map<? extends Serializable, ? extends Serializable>) mapFrom);
}
上面的代码在 eclipse 中编译成功(有类型安全警告),但在 maven 中编译失败(javac 导致的“不兼容类型”错误?)。
现在我必须像这样更改我的代码:
public static void main(String[] args) {
Map<String,Object> mapFrom=null;
fac((Map) mapFrom);
}
我已经确认java版本是相同的,我的问题是:
为什么他们有不同的行为?
编写代码的首选方式是什么?
最佳答案
Eclipse 带有自己的 Java 编译器; Maven 使用 javac。大多数时候,两者都接受相同的代码,但泛型很复杂,而且编译器确实存在错误。例如,Java 6 的 javac
中有一些已知的错误会导致问题。
Oracle 不会修复它们。解决方案是使用 Java 7 运行 Maven 并配置 maven-compiler-plugin
生成 Java 6 字节代码(请参阅 Kumar Sambhav's answer)。
关于java - Eclipse 和 Maven 之间类型转换的不同编译行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19266797/