2012-02-21 33 views
20

xem xét mã này:Độ phân giải quá tải nên chọn phương pháp riêng?

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(""); 
    } 
} 

Với phiên bản javac 1.6.0_29, nó thất bại trong việc biên dịch, trong đó nêu:

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

Vâng, đây là mã ngớ ngẩn và có ít nhất hai cách giải quyết rõ ràng, nhưng Tôi tò mò. Dựa trên section 15.12.2 of the specification, lỗi biên dịch này có vẻ giống như một lỗi trong javac, vì bước đầu tiên nên loại bỏ không do varargs doIt, vì nó không thể truy cập theo section 6.6.1. Tôi có thiếu một số chi tiết khác trong thuật toán tra cứu hoặc là điều này rõ ràng là sai như tôi nghĩ rằng nó là?

+1

Để hoàn chỉnh, lỗi là gì? –

+0

Đó là một lỗi sao chép/paster lạ, cảm ơn vì đã bắt được nó. Tôi đã chỉnh sửa nó. –

+1

Chạy cùng một mã trên JDK 1.6.0_23 và không nhận được lỗi (Tôi biết bạn đã làm điều đó trên _29, nhưng vẫn được kiểm tra) – Deco

Trả lời

Các vấn đề liên quan