我们的 Java 项目中有一个 LogManager 类,如下所示:
public class LogManager {
public void log(Level logLevel, Object... args) {
// do something
}
public void log(Level logLevel, int value, Object... args) {
// do something else
}
}
在 Debian 下使用OpenJDK 6编译项目时,一切正常。使用OpenJDK 7时,构建(使用 ant 完成)会产生以下错误并且构建失败:
[javac] /…/LogManager.java:123: error: reference to log is ambiguous,
both method log(Level,Object...) in LogManager
and method log(Level,int,Object...) in LogManager match
[javac] log(logLevel, 1, logMessage);
[javac] ^
[javac] /…/SomeOtherClass.java:123: error: reference to log is ambiguous,
both method log(Level,Object...) in LogManager
and method log(Level,int,Object...) in LogManager match
[javac] logger.log(logLevel, 1, logMessage);
[javac] ^
只要1没有被自动装箱,方法调用就应该是明确的,因为1是一个 int 并且不能向上转换为 Object。那么为什么自动装箱不在这里推翻可变参数呢?
无论是否安装了 OpenJDK 6,Eclipse(使用来自 eclipse.org 的 tar.gz 安装)都会编译它。
非常感谢你的帮助!
编辑:
编译器source="1.6"
在target="1.6"
这两种情况下都可以选择。Eclipse 编译说明仅作为注释。