39

Khi bạn mở rộng một lớp với ngoại lệ của lớp (để tạo ngoại lệ mới), bạn sẽ nhận được cảnh báo để có một serialVersionUID. Tôi biết rằng serialVersionUID đóng một vai trò quan trọng trong khi tuần tự hóa và deserialization, nhưng khi ngoại lệ của tôi cần phải được serialized? Bất cứ ai có thể cho tôi một trường hợp thực tế trong đó tôi muốn lớp học ngoại lệ tùy chỉnh của tôi để có serialization và deserialization?Tại sao lớp ngoại lệ của tôi cần phải được sắp xếp theo thứ tự?

Trả lời

50

Điều này là do lớp gốc cho tất cả ngoại lệ, Throwable triển khai giao diện Serializable. Tất cả các ngoại lệ theo mặc định là serializable và đó là một quyết định thiết kế ngôn ngữ bởi vì các tác giả muốn ngoại lệ để có khả năng được gửi qua dây mà không có bất kỳ cấu hình đặc biệt nào.

Nếu lớp cơ sở không thể tuần tự hóa, bạn sẽ gặp khó khăn trong việc truyền tải chính xác những gì đã xảy ra trong trường hợp phương pháp từ xa không thành công do bạn không kiểm soát được các loại ngoại lệ.

11

Nếu ngoại lệ tùy chỉnh của bạn đã từng được sử dụng trong ứng dụng phân tán để vượt qua dây và đi đến khách hàng.

4

Tùy chọn duy nhất của bạn là xác định serialVersionUID cho mỗi loại Exception loại bạn xác định (IDE có thể tạo cho bạn) hoặc chặn cảnh báo.

Bạn có thể tìm câu hỏi trước đây của mình explicit serialVersionUID considered harmful? có liên quan.

Các vấn đề liên quan