О сгенерированном serialVersionUID в Eclipse

Есть ли способ генерировать serialVersionUID в Eclipse серийно? Серийно я хочу сказать, что если один сериализуемый класс имеет serialVersionUID = 1L, то при генерации serialVersionUID другого класса это будет serialVersionUID = 2L.

Если я вручную укажу 1L, 2L, 3L и т.д., это может создать любую проблему?

Eclipse предоставил возможность выбрать "Добавить сгенерированный идентификатор серийной версии", можно ли выбрать этот вариант?

Ответ 1

Нет, это не создаст проблем ни в одном из ваших двух обстоятельств:

  • вы можете вручную указать его поэтапно
  • вы можете позволить Eclipse назначить им случайные сгенерированные значения
  • вы можете сохранить их все 1L для разных классов

Целью последовательного UID является запрещение сериализации и десериализации одних и тех же классов в разных версиях, особенно когда нет прямой совместимости (например, новая версия класса не может быть сериализована/неэтериализована по предыдущему определению).

Это обстоятельство встречается очень редко, особенно при работе с вашим собственным проектом, который не является частью больших рамок, которые полагаются на сериализацию. Таким образом, вы можете безопасно делать все, что хотите.

Ситуация, в которой вы хотите иметь разные сериальные файлы для одного и того же класса, - это когда вы обновляете класс, и вы хотите запретить его сериализацию с предыдущим объявлением класса SAME.

Ответ 2

Позвольте мне ответить на ваши вопросы назад:

Добавить сгенерированный серийный идентификатор версии... это безопасно? Ответ: Да

Если вы указали вручную 1L, 2L, 3L, это проблема: больше не проблема, чем их все 1 или любое другое число

генерация последовательных идентификаторов серийно: ответ заключается в том, что для этого не существует встроенного механизма. Тот факт, что вы задаете этот вопрос, заставляет меня поверить, что вы не знаете, для чего нужен serialVersionUID. Даже если вы уже прочитали, что это значит, вы должны прочитать его снова.

Ответ 3

Вы не должны делать этого вообще. Идея заключается в том, что вы сохраняете константу serialVersionUID как можно дольше в ходе эволюции класса, соблюдая правила в разделе "Версии объектов" в Спецификации сериализации объектов.

Ваш "стиль программирования" не имеет к этому никакого отношения. Речь идет о том, чтобы использовать вещь для цели, для которой она была предназначена. Он не предназначен для этой цели. Системы управления исходными кодами могут сделать это для вас.

Ответ 4

сериализация java поддерживает то, что все классы имеют один и тот же serialVersionUID

это используется для контроля версий, поэтому сериализованные объекты из более старого определения несовместимы с более новой версией

проверьте http://java.sun.com/developer/technicalArticles/Programming/serialization/ для уточнения (прокрутите вниз до "управления версиями" )