Получить доступ

Зачем нужен serialVersionUID?

MiddleСериализация
Коротко

serialVersionUID — версия класса для встроенной сериализации. При несовпадении версии в потоке и у локального класса — InvalidClassException. Если не объявить, JVM вычислит её из структуры класса, и любое изменение (даже новый метод) сломает совместимость.

  • Объявляют явно: private static final long serialVersionUID = 1L
  • Меняют, когда изменение несовместимо
  • transient — исключить поле из сериализации

А ещё Для обмена данными лучше JSON или Protobuf

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Если serialVersionUID у потока и локального класса не совпадает, десериализация падает InvalidClassException. transient исключает поле из стандартной сериализации.

Что хотят услышать

  • Назначение и поведение при несовпадении.
  • Почему объявлять явно.

Частые ошибки

  • Десериализовать непроверенные данные.
  • Думать, что static поля сериализуются как состояние объекта.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Это уникальный идентификатор объекта
  • ✗Он шифрует сериализованные данные
  • ✓Это версия класса; при несовпадении с потоком — InvalidClassException, поэтому его задают явно для контроля совместимости
  • ✗Без него сериализация не работает вовсе

Что спросят дальше

  • Что делает transient?
  • Чем Externalizable отличается от Serializable?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем