Các mã sau đây:Tại sao một lớp bên trong tuần tự không thể tuần tự hóa được?
public class TestInnerClass {
public static void main(String[] args) throws IOException {
new TestInnerClass().serializeInnerClass();
}
private void serializeInnerClass() throws IOException {
File file = new File("test");
InnerClass inner = new InnerClass();
new ObjectOutputStream(new FileOutputStream(file)).writeObject(inner);
}
private class InnerClass implements Serializable {
private static final long serialVersionUID = 1L;
}
}
ném ngoại lệ sau đây:
Exception in thread "main" java.io.NotSerializableException: TestInnerClass
Tôi đoán các lớp bên trong có một trường TestInnerClass.this
cho phép nó truy cập tới TestInnerClass
's lĩnh vực và phương pháp. Khai báo lớp bên trong tĩnh solves it, nhưng điều gì sẽ xảy ra nếu InnerClass
cần quyền truy cập này? Có cách nào để tuần tự hóa một lớp bên trong không tĩnh mà không có lớp kèm theo, ví dụ: bằng cách tham chiếu đến lớp bên ngoài transient
?
chỉnh sửa: ví dụ: chỉ có thể truy cập vào lớp bên ngoài trước khi tuần tự hóa. OK, trình biên dịch không thể biết điều đó, nhưng tôi nghĩ đó là lý do tại sao từ khóa transient
tồn tại.
đã bạn cố gắng để khai báo lớp bên trong tĩnh? 'private static class InnerClass' – gnat