Подтвердить что ты не робот

Если разрешение перегрузки выбирает частные методы?

Рассмотрим этот код:

class Foo {
    public void doIt(String... strs) {
        System.out.println("this is varargs");
    }

    private void doIt(String str) {
        System.out.println("this is single");
    }
}

class Bar {
    public static void main (String[] args) {
        new Foo().doIt("");
    }
}

С javac-версией 1.6.0_29 он не скомпилируется, указав:

VarArgsError.java:14: doIt(java.lang.String) has private access in Foo
  new Foo().doIt("");
           ^
1 error

Да, это глупый код, и есть как минимум два очевидных обходных решения, но мне любопытно. Основываясь на разделе 15.12.2 спецификации, эта ошибка компиляции кажется ошибкой в ​​javac, потому что на первом этапе следует удалить не-varargs doIt, поскольку она недоступна согласно разделу 6.6.1. Я пропустил некоторые другие детали в алгоритме поиска или это явно не так, как я думаю?

4b9b3361