Добавить в корзинуПозвонить
Найти в Дзене
Java

🖥 В Java длинные цепочки вроде `user → address → city` легко превращаются в ловушку для `NullPointerException

`. Обычный вариант быстро разрастается: 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`.

Обычный вариант быстро разрастается:

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.