Nó item không 74 của cuốn sách java hiệu quả có một đoạn (para thứ 2 từ cuối cùng của mục 74) mà đề cập đến theo dưới đây:hiệu quả java mục không 74 (trên serialization): Thực hiện Serializable sáng suốt
Các lớp bên trong (Mục 22) không nên thực hiện Serializable. Họ sử dụng các trường tổng hợp do biên dịch tạo ra để lưu trữ các tham chiếu kèm theo các trường hợp và để lưu trữ các giá trị của biến địa phương từ bao gồm phạm vi . Cách các trường này tương ứng với định nghĩa lớp là không xác định, cũng như tên của các lớp ẩn danh và cục bộ. Do đó, dạng tuần tự mặc định của một lớp bên trong là ill- được xác định.
Tôi biết về lớp bên trong sử dụng trình biên dịch tạo ra trường tổng hợp để lưu trữ tham chiếu đến các trường hợp kèm theo, ví dụ: nếu lớp kèm theo là MyEnclosing và lớp bên trong là MyInner thì tham chiếu kèm theo là MyEnclosing.this. Nhưng tôi không thể lấy phần BOLD. Xin hãy giúp tôi hiểu ý nghĩa. Cảm ơn!!!
cảm ơn vì nỗ lực của bạn. Về cơ bản, bạn muốn nói là val $ a là biến được lưu trong lớp bên trong bởi trình biên dịch (val $ a) là một phần của lớp ngoài. Tôi có đúng không? Nếu tôi đúng thì vấn đề là gì không phải là tuần tự hóa lớp bên trong. Về cơ bản tôi không thể có được của bạn "Nhưng tên chính xác được sử dụng trong tình huống này không phải là một phần của spec của trình biên dịch" một phần. – Trying
Tôi khá chắc chắn rằng tôi đã thấy các tệp lớp với quy ước đặt tên có thể gọi là lớp bên trong ở đây 'OuterClass $ method $ 1' thay vì' OuterClass $ 1' (mặc dù tôi đã thử một vài trình biên dịch vừa rồi và không thể để tái tạo điều đó). Vấn đề là [spec] (http://jcp.org/aboutJava/communityprocess/maintenance/JLS/innerclasses.pdf) chỉ yêu cầu trình biên dịch tạo ra một tên duy nhất bằng cách nối thêm một số tổ hợp của $, chữ cái, và số sau tên lớp kèm theo. Và nếu tên lớp đã thay đổi, việc deserialization sẽ thất bại. –
Tôi hơi bối rối ... Tại sao lớp Vô danh 'Runnable' của bạn lại được serialize khi bạn đang tuần tự hóa' this'? Chỉ các trường của lớp ngoài của bạn mới được đăng. Và câu hỏi thực sự đề cập đến lớp bên trong/địa phương/ẩn danh là 'Serializable' ... –