Почему автобокс не отменяет varargs при использовании перегрузки метода в Java 7?

У нас есть класс LogManager в нашем Java-проекте выглядит так:

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 все работает нормально. При использовании 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 или нет.

Большое спасибо за вашу помощь!

Изменить:

В обоих случаях компилятор получает параметр source = "1.6" и target = "1.6" . Заметка о компиляции Eclipse предназначена только как комментарий.

19
задан Michael 7 October 2011 в 16:09
поделиться