0

这是我的代码示例:

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. 编写代码的首选方式是什么?

4

2 回答 2

1

Eclipse 自带 Java 编译器;Maven 使用javac. 大多数时候,两者都接受相同的代码,但泛型很复杂,编译器确实有错误。例如,Java 6中有几个已知的错误javac会导致问题。

Oracle 不会修复它们。解决方案是使用 Java 7 运行 Maven 并配置maven-compiler-plugin生成 Java 6 字节代码(请参阅Kumar Sambhav 的答案)。

于 2013-10-09T09:13:48.530 回答
0

尝试将此插件(在 build->plugins-> 标签中)添加到您的 pom.xml 中:-

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>

这将确保编译器版本与您的项目一起使用。

于 2013-10-09T09:07:10.250 回答