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

  显示原文与译文双语对照的内容
0 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. 编写代码的首选方法是什么?

时间: 原作者:

0 0

Eclipse 带有自己的Java编译器;Maven 使用 javac 。 大多数时候,都接受相同的代码但泛型是复杂的,编译器确实具有 Bug 。 Java 6的javac 中有一些已经知的Bug,这会导致问题,例如。

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

原作者:
0 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>

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

原作者:
...