Если serialver выводит serialVersionUID, то все хорошо?

#java #serialization

#java #сериализация

Вопрос:

Если я запускаю serialver класс и он выводит a serialVersionUID , означает ли это обязательно и автоматически, что все в порядке, что класс действительно сериализуем, что мне больше ничего не нужно проверять?

Комментарии:

1. Нет, это не так. Это просто генерирует «хэш» класса, который вы можете использовать для однозначной идентификации текущей версии. Почти всегда лучше создать свой собственный serial. Это ничего не говорит о вашей логике и о том, будет ли класс на самом деле сериализован. Но это очень легко проверить.

2. а) Как мне сгенерировать свой собственный serial (т. Е. Какие факторы я учитываю)? б) У меня есть довольно много классов, которые мне, возможно, придется сериализовать (для хранения в HttpSession), поэтому тестирование их всех может занять слишком много времени.

3. ТЕСТИРОВАНИЕ НИКОГДА НЕ ДОЛЖНО ЗАНИМАТЬ МНОГО ВРЕМЕНИ. Фактически, в современной разработке тестирование должно происходить перед кодированием. Теперь, когда это исключено, serial — это версия вашего класса. Вы не можете десериализовать классы с разными версиями. Итак, начните с 1 , и когда вы внесете изменение, которое нарушает сериализацию, измените его на … 2 .

4. Какие вещи нарушат сериализацию? Добавление / удаление полей? Изменение типов? Что еще? Нашел что-то: изменения типов, влияющие на сериализацию — это то, что вы имеете в виду?

5. У вас есть какой-то объект Apple . Вы сохраняете его. Вы добавляете поле Apple , которое является обязательным — скажем, его разновидность. Теперь вы загружаете старый Apple . Ой, cultivar есть null . Это зависит как от механики сериализации, так и от вашей собственной бизнес-логики.