这是我的代码示例:
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版本是一样的,我的问题是:
为什么他们有不同的行为?
编写代码的首选方法是什么?
答案 0 :(得分:1)
Eclipse带有自己的Java编译器; Maven使用javac
。大多数情况下,两者都接受相同的代码,但泛型很复杂,编译器也有错误。例如,Java 6的javac
中存在一些已知错误,这些错误会导致问题。
Oracle不会修复它们。解决方案是使用Java 7运行Maven并配置maven-compiler-plugin
生成Java 6字节代码(请参阅Kumar Sambhav's answer)。
答案 1 :(得分:0)
尝试将此插件(内置build-&gt; plugins-&gt;标记)添加到您的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>
这将确保编译器版本与您的项目一起使用。