Рассмотрим этот код:
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. Я пропустил некоторые другие детали в алгоритме поиска или это явно не так, как я думаю?