`. Обычный вариант быстро разрастается: User user = userRepository.findByEmail(email); if (user != null) { Address address = user.getAddress(); if (address != null) { return address.getCity(); } } return "unknown"; Проблема не только в количестве строк. В таких вложенных if легко забыть один уровень проверки и получить NPE в самом неожиданном месте. С Optional это можно записать короче и безопаснее: return userRepository.findByEmail(email) .map(User::getAddress) .map(Address::getCity) .orElse("unknown"); Каждый map() выполняется только если предыдущее значение существует. Если пользователя нет, адреса нет или город не задан - цепочка спокойно дойдёт до orElse(). Для таких случаев Optional хорошо работает как способ явно показать: значение может отсутствовать, и это нормальная часть логики. Главное не превращать Optional в новую религию. Он особенно полезен на границах методов и в цепочках, где каждый следующий шаг может вернуть null.
🖥 В Java длинные цепочки вроде `user → address → city` легко превращаются в ловушку для `NullPointerException
2 июля2 июл
2
~1 мин