Вопрос с собеседования · Java

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

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

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

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

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

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования