Rozważmy następujący kod:Czy przeciążalność należy wybrać Metody prywatne?
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("");
}
}
Z javac wersji 1.6.0_29, to nie skompilować, stwierdzając:
VarArgsError.java:14: doIt(java.lang.String) has private access in Foo
new Foo().doIt("");
^
1 error
Tak, to jest kod głupie i istnieją co najmniej dwa oczywiste obejścia, ale Jestem ciekawy. Oparty na section 15.12.2 of the specification, ten błąd kompilacji wydaje się być błędem w javacu, ponieważ pierwszy krok powinien usunąć nie-varargs do itt, ponieważ jest on niedostępny zgodnie z section 6.6.1. Czy brakuje mi jakichś innych szczegółów w algorytmie wyszukiwania lub czy jest to oczywiście błędne, jak myślę?
Dla kompletności, jaki był błąd? –
To był dziwny błąd kopiowania/pomyłek, dzięki za złapanie go. Zmieniłem to. –
Przebiegł ten sam kod na JDK 1.6.0_23 i nie dostał błędu (wiem, że zrobiłeś to na _29, ale mimo to przetestowano) – Deco