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

Как в immutable-дизайне моделируют «изменение» и снижают его цену?

MiddleООП
Коротко

«Изменение» — новый объект: методы withX возвращают копию с одним изменённым полем. Для частых правок — изменяемый Builder, отдающий неизменяемый результат, или persistent-структуры с разделением общей части.

  • Пример JDK: LocalDate.plusDays, String.replace
  • В горячем цикле withX плодит мусор
  • Record в Java пока без встроенных withers — пишут вручную или Lombok @With

А ещё StringBuilder → String — та же схема

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

Подробно

Цена неизменяемости — копирование при «изменении»: методы withX возвращают копию с одним изменённым полем. Для редких изменений это дёшево; для частых берут изменяемый Builder, который собирает состояние и отдаёт неизменяемый результат, или persistent-структуры. Главное — не плодить withX в горячем цикле (мусор для GC); там уместен мутабельный буфер с заморозкой на выходе.

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

  • withX и копирование.
  • Builder и persistent-структуры для частых изменений.

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

  • Обходить final рефлексией ради «изменения».
  • Сыпать withX в горячем цикле.

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

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

Показать варианты и ответ
  • ✓Вместо мутации создают новый объект (методы withX); при частых изменениях берут изменяемый Builder, который на выходе отдаёт неизменяемый результат
  • ✗Меняют поля через рефлексию, обходя final
  • ✗Добавляют сеттеры только для часто меняющихся полей
  • ✗Никак — изменяемые данные неизменяемыми объектами не моделируют

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

  • Чем Builder лучше цепочки withX при частых изменениях?
  • Что такое persistent-структуры?

Разбор темы

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

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

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

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

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