Должен ли serialVersionUID быть уникальным для разных классов?

class A implements Serializable{
    private static final long serialVersionUID = 5L;
    ...
}

и

class B implements Serializable{
    private static final long serialVersionUID = 6L;
    ...
}

то необходимо предоставить уникальный serialVersionUID для обоих классов.

Итак, могу ли я назначить serialVersionUID = 5L для обоих классов?

Я читаю следующие ссылки

Зачем генерировать длинный serialVersionUID вместо простого 1L?

Что такое serialVersionUID и почему я должен его использовать?

Ответ 1

Да, вы можете. Серийные версии разных классов независимы и не мешают друг другу.

PS
Eclipse даже предлагает установить serialVersionID значение по умолчанию 1L.

Ответ 2

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

Ответ 3

SerialVersionUUID - это идентификатор, используемый компилятором для сериализации/десериализации объекта. Этот идентификатор является частным членом класса.

Создание нового uuid для каждого сериализуемого хорошо иметь контроль над процессом сериализации/десериализации, но он НЕ обязательно должен быть уникальным среди разных классов.

Ответ 4

serialVersionUID может быть чем угодно.

Но лучше всего начинать с с наименьшего числа (например, 0L) и обновлять его всякий раз, когда вы вносите изменения в класс, которые влияют на сериализацию, например, добавляя/обновляя/удаляя поле, в В этом случае вы должны увеличить номер версии с 0L до 1L и так далее.

Ответ 5

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