2012-02-21 16 views
20

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ę?

+1

Dla kompletności, jaki był błąd? –

+0

To był dziwny błąd kopiowania/pomyłek, dzięki za złapanie go. Zmieniłem to. –

+1

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

Odpowiedz

Powiązane problemy