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.class
và SynthesizeAnonymous$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?