为什么在 Java 7 中使用方法重载时,自动装箱不推翻 varargs?
2022-09-02 13:31:55
我们在 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。那么,为什么自动装箱在这里不推翻 varargs 呢?
Eclipse(使用 eclipse.org 的tar.gz安装)无论是否安装了OpenJDK 6,都会编译它。
非常感谢您的帮助!
编辑:
编译器获取该选项,在这两种情况下。Eclipse 编译注释只是一个注释。source="1.6"
target="1.6"