О serialVersionUID в Eclipse

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

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

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

4 ответов


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

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

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

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

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


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

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

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

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


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

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


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

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

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