В этой продолжающейся серии статей, посвященных Java и Spring Boot, текущая часть углубляется в необязательный класс Java, предоставляя исчерпывающую информацию.
Среди новых функций, которые были представлены как часть JAVA 8, необязательный класс выделяется как один из полезных классов для разработчиков, поскольку он предотвращает неожиданные исключения нулевого указателя и аварийное завершение программы.
Что такое необязательный класс?
По сути, необязательный класс может быть представлен как объект-контейнер, который может содержать ненулевое значение, а может и не содержать. Это обеспечивает более безопасный способ работы со сценариями, в которых значение может быть нулевым. Для обработки таких сценариев необязательный класс — лучший способ для разработчиков сделать код более надежным и предсказуемым.
Почему необязательный класс?
До Java 8 разработчики сталкивались с серьезными проблемами при обработке сценариев с нулевыми значениями, которые часто приводили к аварийному завершению (исключения нулевого указателя). Потому что они должны вручную проверять нулевую ссылку перед использованием любого объекта, что делает код уродливым с многочисленными проверками на нулевое значение. Чтобы справляться с такими сбоями, в выпуске Java 8 был представлен класс Optional, который оказался лучшим оружием для разработчиков в решении проблемы обработки нулевых ссылок.
Теперь давайте подробно обсудим, как использовать этот класс и где?
Чтобы узнать истинный потенциал включения необязательного класса, нужно знать проблему в коде до введения необязательного класса (до Java 8).
Из фрагмента 1 можно заметить, что он генерирует исключение нулевого указателя, когда мы пытаемся получить доступ к нулевой ссылке (четвертый элемент массива фильмов строкового типа). Итак, чтобы предотвратить это аварийное завершение программы, на помощь разработчикам приходит класс Optional.
Теперь давайте посмотрим, как класс Optional обрабатывает такие сценарии в программе.
Из фрагмента 2 можно заметить, что в код включен необязательный класс для обработки нулевых ссылок. Он проверит значение, если оно равно нулю, используя ofNullable(). Если значение isPresent() возвращается, то это значение не является нулевым, и разработчик может выполнять желаемые операции со значением, не опасаясь NPE.
Здесь значение Movies[5] явно равно null, поскольку мы только что инициализировали массив фильмов и не присваивали ему никаких значений. Таким образом, блок else будет выполняться и отображать в нем текст, который является выходом фрагмента.
Теперь, внимательно изучив оба фрагмента кода, можно заметить, что читабельность кода и способ обработки аварийных завершений лучше во втором фрагменте, где мы использовали необязательный класс в коде.
До этого момента, я надеюсь, мы хорошо разобрались с необязательным классом в пакете java. Теперь давайте сделаем еще один шаг вперед, чтобы узнать об этом подробнее.
Некоторые из важных методов этого необязательного класса:
- ) of(Value‹T›) =› возвращает необязательный параметр с заданным ненулевым значением.
- ) ofNullable(Value‹T›) =›, если значение не равно null, возвращается необязательный параметр, описывающий данное значение, в противном случае возвращается пустой необязательный объект.
- ) empty() => возвращает пустой необязательный объект, так как для этого необязательного объекта нет значения.
- ) isPresent() => возвращает true, если значение присутствует, иначе возвращает false.
- ) get() => если значение присутствует в необязательном параметре, то он вернет значение, иначе будет выброшено исключение NoSuchElementException.
Теперь, когда у каждого есть хорошее представление о функциональности класса Optional, у кого-то есть сомнения «Почему класс Optional лучше ручной проверки null?». Поскольку они оба выполняют одну и ту же задачу. проверки нулевых ссылок перед их использованием.
Ответ на приведенный выше неоднозначный вопрос:
Когда метод может не всегда давать результат и когда вы хотите обеспечить явную обработку необязательных значений. Это может улучшить читаемость кода и снизить риск возникновения исключений NullPointerException, особенно при работе с внешними источниками данных или при возврате значений из методов. Принимая во внимание, что ручные проверки на null приводят к многословному коду и не будут идеальными для поддержки.
На этом я заканчиваю эту статью и вернусь еще со многими другими!
Счастливого обучения!