2009-08-12 13 views
5

Khi bạn biên dịch một lớp Java với một lớp bên trong riêng, có vẻ như một lớp ẩn danh được tự động tổng hợp cùng với nó vì một lý do nào đó. Lớp này là đủ để tái tạo nó:Lớp bên trong cá nhân tổng hợp lớp ẩn danh bất ngờ

public class SynthesizeAnonymous { 
    public static void method() { 
     new InnerClass(); 
    } 

    private static class InnerClass {} 
} 

Khi biên soạn, điều này tạo ra các dự kiến ​​SynthesizeAnonymous.classSynthesizeAnonymous$InnerClass.class file, nhưng nó cũng tạo ra một tập tin SynthesizeAnonymous$1.class lạ mà tương ứng với một lớp ẩn danh của java.lang.Object đã được tổng hợp. Nếu bạn xem xét việc tháo gỡ với javap, có vẻ như hàm tạo mặc định là InnerClass có được thông số ẩn của loại ẩn danh này và rằng null được chuyển đến khi số gọi new InnerClass() được gọi.

Tại sao lớp học này được tạo? Nó được tạo ngay cả khi InnerClass không phải là tĩnh, nhưng nó không được tạo nếu InnerClass không phải là riêng tư hoặc không có cá thể nào của InnerClass được tạo. Có một số hình thức kiểm soát truy cập không? Nó hoạt động như thế nào?

Trả lời

5

Lớp này được tạo để cung cấp cho bạn quyền truy cập vào hàm tạo riêng tư.

Hãy xem this question để biết chi tiết.