Подтвердить что ты не робот

Зачем использовать случайные числа для UID с последовательной версией?

EDIT: случайным я имею в виду большое вычислительное число, не имеющее смыслового значения для нас как разработчиков

При внедрении интерфейса Serializable лучшая практика и очень важно указать UID с последовательной версией. Во многих местах я часто вижу случайные числа, которые используются. Например.

Эффективная Java (2-е издание) стр. 312:

private static final long serialVersionUID = 234098243823485285L;

Из класса String в Java 6:

private static final long serialVersionUID = -6849794470754667710L;

Из класса ArrayList в Java 6:

private static final long serialVersionUID = 8683452581122892189L;

и т.д.. Даже eclipse предлагает возможность генерировать эти случайные числа (хотя основным по умолчанию является создание serialVersionUID 1L)

Зачем использовать случайные числа? Разве не имеет смысла начинать с 1L и увеличивать до 2L, когда он изменяется, как любой разумный контроль версий? Единственный раз, когда я могу придумать использовать случайное число, - это если вы не указали serialVersionUID для начала и хотите сделать это сейчас (что связывает вас с автогенерированной версией времени выполнения, чтобы обеспечить обратную совместимость).

4b9b3361

Ответ 1

Эти "случайные" числа, вероятно, являются номерами, которые были бы автоматически созданы для класса в его "текущей" форме в соответствии с Спецификация сериализации объектов Java... где "ток" является "текущим в момент времени serialVersionUID, был впервые объявлен".

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

Ответ 2

Они почти наверняка не являются случайными числами, а скорее результатом инструмента serialver.