SerialVersionUID для Сериализуемых - PullRequest
2 голосов
/ 12 ноября 2011

Я реализую больше классов, которые расширяют интерфейс Serializable.Я понял, что хорошо упомянуть значение для serialVersionUID.

private static final long serialVersionUID = 1024L;

Итак, учитывая, что я буду использовать все эти классы, должен ли я дать одинаковое значение для serialVersionUID для каждого класса или наоборот, они должны быть разными?

Спасибовы.

Ответы [ 4 ]

4 голосов
/ 12 ноября 2011

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

3 голосов
/ 12 ноября 2011

serialVersionUID для одного класса не имеет абсолютно никакого отношения к классу другого класса. Следствие состоит в том, что serialVersionUID одного класса абсолютно не влияет на эффект другого класса.

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

2 голосов
/ 12 ноября 2011

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

http://docs.oracle.com/javase/1.5.0/docs/api/java/io/Serializable.html

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

Ура!

2 голосов
/ 12 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...