Статья подготовлена для студентов курса «Разработчик Java» в образовательном проекте OTUS.
В первой части мы рассмотрели случай, когда Null-монаду, т. е. Optional, разумно применить в программах на Java. В этот раз давайте посмотрим на некоторые детали использования.
Начнём с вариантов создания
Мы уже рассмотрели варианты Optional.ofNullable – это хороший способ создать Optional, если значение допустимо. Если Optional не может содержать Null, то можно использовать Optional.of. В этом случае прямо при создании Optional будет выполнена проверка значения на null, а при попытке передать null будет выброшено исключение.
Если требуется установить null, но нужно сделать это «осознанно» (т. е. сообщить, что в Optional мы явно помещаем значение null), следует использовать Optional.empty() как в примере из первой части. Optional готов и его можно использовать.
Часто можно встретить такой код:
isPresent работает как ожидается, однако это не соответствует стилю использования Optional. Вариант лучше будет выглядеть так:
Если требуется из Optional извлечь значение, то можно сразу предусмотреть вариант на случай отсутствия значения. Можно вернуть константу как в примере ниже:
А можно выполнить другую функцию (эта возможность появилась в java9):
Optional можно и даже нужно включить в stream обработчиков. Например, так:
Тут важно отметить, что даже если mayBeNullOptional вернёт empty, то NPE не произойдёт.
Делаем выводы
Optional – очень удобный функционал для работы со значениями. Это хороший пример null-монады. В мире функционального программирования кроме null-монады есть ещё одна очень интересная штука – try-монада. Она нужна для упрощения работы с исключениями. Как Try-монаду использовать в java мы поговорим в следующий раз…
Есть вопрос? Напишите в комментариях!
Материал подготовлен для студентов курса «Разработчик Java» в образовательном проекте OTUS. Чтобы присоединиться к ближайшей группе, обязательно пройдите вступительное тестирование:
ПРОЙТИ ТЕСТИРОВАНИЕ