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

Что произойдёт с полем, помеченным transient, при сериализации и последующей десериализации?

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

Поле не попадёт в поток, а после восстановления получит значение по умолчанию для типа (null, 0, false) — инициализатор поля и конструктор не выполняются.

  • Восстановить — в readObject или лениво при первом обращении
  • Применение: кэши, производные значения, ссылки на ресурсы и соединения
  • Jackson transient-поля тоже по умолчанию пропускает

А ещё Конструктор первого несериализуемого предка всё же вызывается

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

Подробно

Это часто становится сюрпризом: восстановленный объект не проходит через конструктор, поэтому значения по умолчанию из объявления поля тоже не применяются — там будет именно значение по умолчанию для типа. Если поле нужно восстановить (кэш, производный расчёт, ссылка на ресурс), это делают в readObject или в readResolve. Помечают transient обычно то, что не имеет смысла переносить: соединения, потоки, вычисляемые кэши, а также секреты, которые не должны утечь в поток. Отдельно стоит помнить, что статические поля не сериализуются вовсе — они принадлежат классу, а не экземпляру.

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

  • Значение после восстановления.
  • Как восстановить.

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

  • Ожидать, что инициализатор поля отработает при десериализации.
  • Забывать, что static-поля в поток не попадают.

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

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

Показать варианты и ответ
  • ✓Оно не попадёт в поток, а после восстановления получит значение по умолчанию для своего типа
  • ✗Оно сериализуется, но в зашифрованном виде
  • ✗Оно сохранит значение, которое было на момент сериализации
  • ✗Попытка сериализации такого объекта бросит исключение

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

  • Как восстановить transient-поле после десериализации?
  • Зачем нужен readResolve?

Разбор темы

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

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

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

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

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