Исключения с нулевым указателем довольно раздражают, с которыми каждый разработчик java должен был столкнуться хотя бы один раз. По мере роста кода обработка этих исключений с нулевым указателем станет утомительной из-за многочисленных нулевых проверок.
Необязательный класс был введен в Java 8, чтобы обеспечить решение на уровне типа для представления необязательных значений вместо использования нулевых ссылок. До java 8 Необязательный класс является частью библиотеки Google Guava.
Давайте рассмотрим некоторые реализации с помощью java.util. Необязательно класс
Создание пустого объекта
Пустой необязательный объект может быть создан путем вызова empty статического метода необязательного класса.
@Test public void createEmptyOptional() { Optionalempty = Optional.empty(); assertFalse(empty.isPresent());//Also we can use the opposite one empty.isEmpty() from java 10 }
is Present() вернет значение true только в том случае, если объект в необязательном не равен null;
Создание необязательного класса с объектами
Необязательный класс может быть создан с помощью Optional.of() или Optional.ofNullable() статические методы
@Test public void createOptionalObject() { String title = "Optional"; Optionalopt = Optional.ofNullable(title); assertTrue(opt.isPresent()); String title2 = null; Optional opt1 = Optional.ofNullable(title2); assertFalse(opt1.isPresent()); }
Необязательно.of(title) вызовет исключение NullPointerException, если заголовок был нулевым.
Удалите нулевые проверки при доступе к объектам с помощью необязательного.ifPresent()
Это позволит нам запустить некоторый код для обернутого значения, если обнаружится, что объект, завернутый в необязательный параметр, не равен null.
public void checkOptionalIfPresent() { Color color = ColorFactoryProvider.getColor("red"); Optionalred = Optional.ofNullable(color); red.ifPresent(color -> System.out.println(color.getColorCode()));//wrapped code will get executed Color empty= null; Optional emptyColor = Optional.ofNullable(empty); emptyColor.ifPresent(color -> System.out.println(color.getColorCode()));// wrapped code will not get executed }
Можете ли вы увидеть, как Необязательный класс позволит нам избавиться от проверок null, чтобы обернутый код не выполнялся, если объект равен null?
Доступ к объектам из необязательного класса
Существуют различные методы, которые также поставляются с дополнительным классом.
/* Optional.get() It returns the wrapped object. it throws a no such element exception if the wrapped object is null. */ @Test public void getValue(){ Color color = ColorFactoryProvider.getColor("blue"); OptionaloptionalColor= Optional.ofNullable(color); assertEquals(color, optionalColor.get()); } /* Optional.orElse() It is like assigning default value for the object. if the wrapped object is null then default value will be returned. */ @Test public void OptionalorElseCheck(){ Color defaultColor = ColorFactoryProvider.getColor("red"); Color blue = ColorFactoryProvider.getColor("blue"); Optional optionalColor = Optional.ofNullable(blue); assertEquals(blue, optionalColor.orElse(defaultColor)); Color empty = null; Optional emptyColor = Optional.ofNullable(empty); assertEquals(defaultColor, emptyColor.orElse(defaultColor)); }
Также у нас есть некоторые другие полезные методы Необязательно.or Else Get() – который похож на или Else() разница лишь в том, что он принимает функциональный интерфейс поставщика в качестве входных данных и вызывается только в том случае, если объект-оболочка в Optional равен null.
Optional.orElseThrow() – который аналогичен или Else() разница лишь в том, что он принимает объект исключения в качестве входных данных и выдает данное исключение, если обернутый объект в Optional равен null.
Итак, начните рефакторинг вашего кода с помощью необязательного класса, который предоставляет наилучшие методы обработки null в java.
Для получения более подробной информации ознакомьтесь с официальной документацией
Оригинал: “https://dev.to/vikneswaran/mitigate-null-pointer-exceptions-in-java-with-optional-class-52od”