В нашем 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
}
}
При компиляции проекта с OpenJDK 6 под Debian Everyting
работает отлично. При использовании 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 является целым числом и не может быть преобразовано в Object. Так почему
не автобокс отменяет здесь varargs?
Eclipse (устанавливается с использованием tar.gz из eclipse.org) компилирует его нет
независимо от того, установлен OpenJDK 6 или нет.
Большое спасибо за вашу помощь!
Edit:
Компилятор получает опции source="1.6"
и target="1.6"
в обоих случаях. Замечание по компиляции Eclipse подразумевается как комментарий.