Optional Java
java optional – необязательный объект-контейнер, используемый для хранения ненулевых объектов. Необязательный объект используется для представления null с отсутствующим значением. Этот класс имеет различные служебные методы, облегчающие коду обработку значений как «доступных» или «недоступных» вместо проверки нулевых значений. Он представлен в Java 8 и похож на опциональный в Guava.
Введение Optional класса было значительным улучшением дизайна языка Java, но это улучшение вызвало споры. До появления Optional класса многие разработчики использовали либо null исключения, либо для обозначения отсутствия желаемого значения; однако использование Optional класса позволяет нам явно указать, когда значение может присутствовать, а может и не быть. Несмотря на это улучшение, Optional класс может применяться ненадлежащим образом и причинять больше вреда, чем пользы.
Java, как и большинство объектно-ориентированных (ОО) языков, имеет скрытую лазейку в своей системе типов.
Optional предоставляет набор методов, многие из которых функциональны, что позволяет клиенту решать, что делать, когда желаемое значение отсутствует. Например, мы можем использовать orElse метод для возврата значения по умолчанию, когда желаемое значение не может быть найдено.
Важно отметить две вещи:
Компилятор Java заставляет нас обрабатывать случай пустого Optionalзначения
Клиент несет ответственность за обработку отсутствующего желаемого значения
Хотя документация и аннотации действительно продвигают нас в правильном — более ясном направлении, они не позволяют возлагать ответственность за проверку отсутствующего значения на клиенте. Optional объекты, с другой стороны, требуют, чтобы клиент принял решение о том, как обращаться с отсутствующим значением.