java - Eclipse 和 Maven 之间类型转换的不同编译行为

标签 java eclipse compiler-errors

这是我的代码示例:

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版本是相同的,我的问题是:

  1. 为什么他们有不同的行为?

  2. 编写代码的首选方式是什么?

最佳答案

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/

相关文章:

android - 如何在 Eclipse 中打开 Android Studio 项目?

java - 按钮布局较高

c - 多线程 pthread 错误

c# - 如果其他语句不起作用

java - 为什么使用 Navigator 和 SpringViewProvider 时页面会加载两次?

java - 我想将聊天窗口/选项集成到我的网络应用程序中。我从哪说起呢?

java - Swagger-ui - 列表参数编码

android 复选框被选中始终为 true

android - (31,16) : error CS1525: Unexpected symbol `(' , 期望 `)' 、 `,' 、 `;' 、 `[' 或 `='

Java Regex 找不到匹配项