Tôi có một lớp xác định một loại giá trị bất biến mà bây giờ tôi cần phải tuần tự hóa. Tính bất biến xuất phát từ các trường cuối cùng được đặt trong hàm tạo. Tôi đã thử serializing, và nó hoạt động (đáng ngạc nhiên?) - Nhưng tôi không có ý tưởng như thế nào.Làm thế nào để java serialization deserialize các lĩnh vực cuối cùng khi không có constructor mặc định được chỉ định?
Dưới đây là một ví dụ của lớp
public class MyValueType implements Serializable
{
private final int value;
private transient int derivedValue;
public MyValueType(int value)
{
this.value = value;
this.derivedValue = derivedValue(value);
}
// getters etc...
}
Cho rằng lớp không có không có constructor arg, làm thế nào nó có thể được khởi tạo và các lĩnh vực thiết lập cuối cùng?
(An sang một bên -. Tôi nhận thấy lớp này đặc biệt vì IDEA đã không tạo ra một "không serialVersionUID" thanh tra cảnh báo cho các lớp học này, nhưng cảnh báo được tạo ra thành công cho các lớp khác mà tôi đã chỉ cần thực hiện serializable)
Câu hỏi bổ sung: cách thể hiện của một lớp * ẩn danh được đăng theo thứ tự? – ewernli
Một dự đoán - nó có thể tuần tự hóa chỉ khi một trong các siêu kiểu của nó được tuần tự hóa và lớp kèm theo có thể được tuần tự hóa? Điều đó có vẻ hợp lý, nhưng có ai đó đoán được những gì trong JLS. – mdma
Nó không phải 'bất cứ ai đoán được những gì trong JLS'. Nó ở đó để được ai đó đọc. – EJP