Вопрос проверяет понимание работы с отсутствующими значениями и умение писать более безопасный код без NullPointerException.
Optional — это контейнер, который может содержать значение или быть пустым. Он используется для явного обозначения того, что результат может отсутствовать. Optional помогает избежать NullPointerException и делает API более понятным. Чаще всего он применяется как возвращаемое значение метода. Использовать его для полей и параметров не рекомендуется.
Optional<T> — это обёртка над значением, которая явно показывает:
значение есть
или значения нет
OptionalОсновные цели:
явное моделирование отсутствия значения
уменьшение количества null
повышение читаемости API
Optional<User> user = findUser(id);
user.ifPresent(u -> {
// работа с пользователем
});
Optional предоставляет удобные методы:
isPresent
ifPresent
orElse
orElseGet
orElseThrow
map
String name = user
.map(User::getName)
.orElse("unknown");
хранить Optional в полях классов
передавать Optional как параметр
вызывать get() без проверки
Optional делает отсутствие значения явным и управляемым. Это инструмент для улучшения API, а не замена null повсюду.