TGViewer
Spring АйО Spring АйО @spring_aio · 10.9K subscribers
Post #977 6.92K
Разрыв в неизменяемости: почему Java Records нужны оптики (Lenses)

Records и pattern matching сделали чтение вложенных данных в Java удобным. Но обновить поле глубоко внутри неизменяемой структуры все еще больно: чтобы поменять одну строку (street у адреса менеджера отдела), приходится вручную пересобирать каждый record по пути. В примере это около 25 строк с каскадом копирующих конструкторов и риском ошибки на каждом уровне.

Потенциально новые методы withX() в record помогают мало: обновленное значение все равно нужно протаскивать назад через Address -> Employee -> Department -> Company. Даже JEP 468 (with для records, preview в JDK 25) упрощает один уровень, но не поддерживает вложенное обновление, поэтому получаются цепочки with на каждом слое.

Оптики закрывают этот разрыв: это типобезопасные, компонуемые пути доступа, которые позволяют один раз описать маршрут и дальше читать/писать по нему. Базовая оптика - Lens (ровно 1 цель), есть Prism (0/1 вариант sealed), Affine (0/1 без построения), Traversal (0..many для коллекций). Скомпонованные линзы сами выполняют промежуточную реконструкцию, и обновление превращается в одно простое выражение.

📚 Полный текст по ссылке: https://habr.com/ru/companies/spring_aio/articles/1001066/
  • 🔥 19
  • 🤯 12
  • ❤ 10
  • 👍 4
  • 🤔 1
More from @spring_aio
  1. Oct 3, 2026⚡️⚡️Строки кода стремятся подешеветь до цены токена. Что остается ценным? Про это — трек «…
  2. Oct 2, 2026🙅‍♂️ Не каждый AI-вызов должен генерировать текст Иногда от модели нужен не красивый отве…
  3. Oct 1, 2026JEP 544: JVM будет сохранять машинный код между запусками JEP 544 (Ahead-of-Time Code Comp…
  4. Sep 30, 2026🍃 Переписываем всё на Rust, JavaScript — кошмар, AI против Vaadin | Spring АйО Подкаст №7…
  5. Sep 29, 2026⚡️ AI-плагин уже в OpenIDE Pro Вышли новые версии OpenIDE и OpenIDE Pro: AI-плагин теперь…
  6. Sep 28, 2026🧑‍💻 Скрытая возможность конфигурации Spring Boot, о которой мало говорят Представим, что…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →