Зачем использовать случайные числа для 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 для начала и хотите сделать это сейчас (что связывает вас с автогенерированной версией времени выполнения, чтобы обеспечить обратную совместимость).
Ответы
Ответ 1
Эти "случайные" числа, вероятно, являются номерами, которые были бы автоматически созданы для класса в его "текущей" форме в соответствии с Спецификация сериализации объектов Java... где "ток" является "текущим в момент времени serialVersionUID
, был впервые объявлен".
Это позволило бы данные, которые были ранее сериализованы, чтобы по-прежнему быть десериализованы, - идя вперед к более явному объявлению об изменении изменений в будущем.
Ответ 2
Они почти наверняка не являются случайными числами, а скорее результатом инструмента serialver
.