2012-04-30 16 views
11

Có cách nào để tạo serialVersionUID trong Eclipse serially không? Bởi serially tôi muốn có nghĩa là nếu một lớp serializable có serialVersionUID = 1L, sau đó khi tôi tạo serialVersionUID của một lớp học này sẽ được serialVersionUID = 2L.Giới thiệu về serialVersionUID được tạo trong Eclipse

Nếu tôi chỉ định thủ công 1L, 2L, 3L v.v ..., điều này có thể tạo ra bất kỳ sự cố nào không?

Eclipse đưa ra tùy chọn để chọn "Thêm ID phiên bản nối tiếp được tạo", tùy chọn này có an toàn để chọn không?

+1

Tại sao bạn muốn * các lớp * khác nhau có serialVersionUIDs nối tiếp? –

+0

Đó là phong cách lập trình của tôi để tạo ra serialVersionUID serially. –

+2

Đó là một phong cách phổ biến trên các phiên bản của một lớp duy nhất. Phong cách của bạn trong nhiều lớp học có lợi ích không? Khi sau này bạn muốn phiên bản một lớp cụ thể, bạn sẽ thiết lập serialVersionUID của lớp đó, và điều gì sẽ xảy ra với mối quan hệ nối tiếp giữa các lớp? –

Trả lời

17

không, nó sẽ không tạo ra bất kỳ vấn đề trong bất kỳ của hai hoàn cảnh của bạn:

  • bạn có thể tự xác định nó từng bước
  • bạn có thể cho Eclipse gán chúng giá trị được tạo ra ngẫu nhiên
  • bạn có thể giữ tất cả chúng 1L cho các lớp học khác nhau

Mục đích của UID nối tiếp là cấm serialization và deserialization của các lớp giống nhau trong các phiên bản khác nhau, đặc biệt là khi không có khả năng tương thích về phía trước (ví dụ: phiên bản mới của lớp không thể được tuần tự hóa/unserialized bởi một định nghĩa trước đó).

Đây là một tình huống hiếm khi xảy ra, đặc biệt là khi làm việc với dự án của riêng bạn mà không phải là một phần của khung công tác lớn dựa trên việc tuần tự hóa. Vì vậy, bạn có thể làm một cách an toàn bất cứ điều gì bạn muốn.

Tình huống mà bạn muốn có các chuỗi nối tiếp khác nhau cho cùng một lớp là khi bạn đang cập nhật một lớp và bạn muốn cấm tuần tự hóa lớp đó với khai báo trước đó của lớp SAME.

+2

Điều gì về '@SuppressWarnings (" nối tiếp ")'? Làm thế nào điều này sẽ thay đổi mọi thứ? Được đề xuất, không được khuyến nghị? Tránh? – ADTC

+2

@ADTC nó hoạt động, nhưng phải chịu sự không tương thích của trình biên dịch. Xem giao diện Serializable. Từ Java 7: “Nếu một lớp tuần tự không khai báo rõ ràng một serialVersionUID, thì thời gian chạy tuần tự hóa sẽ tính toán giá trị serialVersionUID mặc định cho lớp đó dựa trên các khía cạnh khác nhau của lớp, như được mô tả trong Java (TM) Object Serialization Specification. Tuy nhiên, […] có thể khác nhau tùy thuộc vào việc triển khai trình biên dịch, và do đó có thể dẫn đến bất ngờ ” – Kissaki

1

serialization java hỗ trợ tất cả các lớp học có serialVersionUID cùng

này là sử dụng để kiểm soát phiên bản để các đối tượng serialized từ một định nghĩa cũ không tương thích với phiên bản mới hơn

séc http://java.sun.com/developer/technicalArticles/Programming/serialization/ để biết cụ thể (cuộn xuống để "kiểm soát phiên bản")

2

Hãy để tôi trả lời câu hỏi của bạn về phía sau:

Thêm ID phiên bản nối tiếp được tạo ... có an toàn không? Trả lời: Có

Nếu bạn tự xác định 1L, 2L, 3L là một vấn đề: Không có nhiều của một vấn đề hơn làm cho chúng tất cả 1 hoặc bất kỳ số khác

tạo id nối tiếp nối tiếp: Câu trả lời là không có được xây dựng trong cơ chế để làm điều này. Thực tế là bạn đang đặt câu hỏi này khiến tôi tin rằng bạn không biết serialVersionUID là gì. Ngay cả khi bạn đã đọc về điều này, bạn nên đọc lại.

+0

Cảm ơn câu trả lời. Có, tôi biết tại sao sserialVersionUID đã được sử dụng, nhưng đó là phong cách lập trình của tôi để tạo ra chúng một cách thẳng thắn trong một dự án trong Eclipse. –

2

Bạn không nên làm điều này chút nào. Ý tưởng là bạn giữ hằng số serialVersionUID càng lâu càng tốt trong quá trình tiến hóa của một lớp, bằng cách quan sát các quy tắc trong phần Phiên bản đối tượng của Đặc tả tuần tự hóa đối tượng.

'Kiểu lập trình' của bạn không liên quan gì đến nó. Nó là một vấn đề của việc sử dụng những thứ cho mục đích nó được thiết kế cho. Nó không được thiết kế cho mục đích bạn đang sử dụng nó cho. Hệ thống kiểm soát mã nguồn có thể làm điều đó cho bạn.

+0

Nếu bạn muốn lớp của bạn hữu ích trong một thời gian dài, bạn chỉ nên thực hiện "các thay đổi tương thích", tất cả đều được xác định trong Đặc tả tuần tự hóa đối tượng mà @EJP đề cập, tại đây. –