2013-04-09 20 views
17

Java Annotation interface không mở rộng Serializable. Tuy nhiên, các giá trị chú giải Java được tuần tự hóa (được thực hiện bằng cách sử dụng java.lang.reflect.Proxy, với trình xử lý gọi có thể tuần tự hóa).Các chú thích Java có thể tuần tự hóa được không?

Điều này có được đảm bảo ở mọi nơi không? Tìm kiếm-foo của tôi không tìm thấy tham chiếu. Hoặc nếu tôi cần phải tuần tự hóa các cá thể chú thích một cách an toàn, tôi có cần phải tạo các proxy tuần tự hóa của riêng mình không?

+1

Trực giác của tôi là có, vì chúng là tĩnh. Họ thậm chí cần phải được 'Serializable' vì điều đó? –

Trả lời

10

Đối tượng chú thích được trả về theo phương pháp java.lang.reflect.AnnotatedElementSerializable. Đây là những gì API says: Giao diện này cho phép đọc chú thích một cách phản ánh. Tất cả các chú thích được trả về bởi các phương thức trong giao diện này là không thay đổi và có thể nối tiếp.

Tất cả các lớp có khả năng trả về các đối tượng chú thích (Class, Constructor, Field, Method, Package, Parameter) thực hiện AnnotatedElement và có nghĩa vụ tạo/trả về các đối tượng Serializable theo hợp đồng trên.

+0

Hoàn hảo, cảm ơn bạn! –

9

Chú thích là một phần của định nghĩa lớp và do đó sẽ không bao giờ được ghi vào luồng tuần tự hóa (ít nhất không phải với tuần tự hóa java chuẩn) khi tuần tự hóa một thể hiện của một lớp có chú thích.

CẬP NHẬT: Tôi đoán tôi đã bỏ lỡ điểm của câu hỏi ban đầu được đề cập đến cụ thể việc tuần tự hóa một thể hiện của một chú thích thực tế.

+0

Tôi đặc biệt hỏi về các giá trị chú thích, trong trường hợp tôi có một đối tượng chú thích (ví dụ: từ 'Class.getAnnotation') và muốn tuần tự hóa nó. Điều này là độc lập với việc chúng thường được tuần tự hóa trong quá trình tuần tự hóa một lớp có chú thích. –

+0

@MichaelEkstrand - tôi hiểu điều đó. tôi đã chỉ ra rằng các giá trị chú thích thường không cần phải được sắp xếp theo thứ tự do điểm mà tôi đã đề cập. câu trả lời khác chắc chắn có thực tế thích hợp hơn, nhưng câu trả lời này là không chính xác trong và của chính nó. – jtahlborn

+0

Sẽ chính xác nếu bạn thêm "khi sắp xếp một lớp có chú thích" – Ajax

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