Tôi có lớp học Outer
có lớp học private Inner
.Java: lớp xây dựng tổng hợp nội bộ riêng tư
Trong phương pháp lớp Outer
của tôi, tôi nhanh chóng lớp Inner
như sau:
Outer outer = new Outer();
Inner inner = outer.new Inner();
Trình biên dịch chuyển mã này vào:
Outer outer = new Outer();
Inner inner = new Inner(outer, null);
Sử dụng phản ánh cho thấy lớp Inner
có sau đây tổng hợp nhà thầu:
private Outer$Inner(Outer)
Outer$Inner(Outer,Outer$Inner)
Vì lớp Inner
là private
, trình biên dịch cho biết thêm rằng private
hàm tạo nên nó không ai có thể khởi tạo lớp đó. Nhưng rõ ràng là lớp Outer
sẽ có thể khởi tạo nó, do đó trình biên dịch thêm rằng xây dựng gói riêng tư khác mà lần lượt gọi hàm tạo riêng. Ngoài ra, vì hàm tạo riêng tư của gói có tên là $
trong tên của nó, mã Java bình thường không thể gọi nó.
Câu hỏi: tại sao tổng hợp một trình xây dựng riêng tư và một gói riêng tư? Tại sao không tổng hợp chỉ constructor gói-tư nhân và được thực hiện với nó?
@Noofiz các nhà xây dựng này được tạo ra bởi trình biên dịch, mà bạn không mã hóa rõ ràng cho chúng; do đó tôi gọi chúng là tổng hợp. – shrini1000
@Noofiz Nếu bạn không hiểu câu hỏi tôi đề nghị bạn để nó cho những người làm. – EJP
Là 'Bên ngoài $ bên trong (Bên ngoài, Bên ngoài $ bên trong) 'thực sự chính xác? Hàm khởi tạo nhận một cá thể của cùng một lớp làm đối số? Tại sao trình biên dịch lại thêm tham số như vậy. –