Tôi sẽ không bận tâm, vì Google có thể giải thích rõ hơn.
Giả sử: lớp chuyên là Foo
và lớp bên trong là Foo$Inner
:
Vấn đề là VM coi truy cập trực tiếp đến các thành viên tin Foo từ Foo $ Nội là bất hợp pháp vì Foo và Foo $ Nội có các lớp học khác nhau, mặc dù ngôn ngữ Java cho phép một lớp bên trong truy cập vào các thành viên riêng của lớp bên ngoài. Để thu hẹp khoảng cách, trình biên dịch sẽ tạo ra một vài phương pháp tổng hợp:
/*package*/ static int Foo.access$100(Foo foo) {
return foo.mValue;
}
/*package*/ static void Foo.access$200(Foo foo, int value) {
foo.doStuff(value);
}
Mã lớp bên trong gọi những phương pháp tĩnh bất cứ khi nào nó cần phải truy cập vào các lĩnh vực mValue hoặc gọi phương thức doStuff trong lớp ngoài. Điều này có nghĩa là đoạn mã trên thực sự chứa đựng một trường hợp bạn đang truy cập các trường thành viên thông qua các phương thức truy cập. Trước đó chúng tôi đã nói về cách truy cập chậm hơn truy cập trực tiếp trường, vì vậy đây là một ví dụ về một thành ngữ ngôn ngữ nhất định dẫn đến một hit "vô hình" hiệu suất hit.
Nếu bạn đang sử dụng mã như thế này trong điểm phát sóng hiệu suất, bạn có thể tránh phí trên bằng cách khai báo trường và phương thức được truy nhập bởi lớp bên trong để có quyền truy cập gói chứ không phải quyền truy cập riêng tư. Thật không may điều này có nghĩa là các trường có thể được truy cập trực tiếp bởi các lớp khác trong cùng một gói, vì vậy bạn không nên sử dụng nó trong API công cộng.
Nguồn: https://developer.android.com/training/articles/perf-tips.html#PackageInner
Bạn đã đọc các lớp bên trong không tĩnh trong Android ở đâu? – Cristian
Đây không chỉ là vấn đề Android. Đối với mã hoán đổi cho nhau và nhanh chóng, bạn nên tránh chúng ngoại trừ chúng tĩnh và lưu trữ thông tin mà chúng yêu cầu dưới dạng các trường cục bộ. Vấn đề với các lớp bên trong là bạn không thể đặt tham chiếu đến lớp cha thành 'null' để lấy nó thành GC'ed. Trình biên dịch phải tạo ra các phương thức truy cập nếu các thành viên lớp cha mà truy cập lớp bên trong là riêng và bạn có một lớp bên trong cho mỗi cá thể lớp cha. – Stephan
@Cristian cuộn xuống cuối liên kết này http://developer.android.com/resources/articles/avoiding-memory-leaks.html nó là để tránh nếu bạn không thể kiểm soát vòng đời của lớp bên trong. – OckhamsRazor