Рубрики
Без рубрики

Смягчение исключений с нулевым указателем в Java с помощью необязательного класса

Исключения с нулевым указателем довольно раздражают, с которыми каждый разработчик java должен был столкнуться хотя бы один раз. A… С тегом java, качество кода, учебное пособие.

Исключения с нулевым указателем довольно раздражают, с которыми каждый разработчик java должен был столкнуться хотя бы один раз. По мере роста кода обработка этих исключений с нулевым указателем станет утомительной из-за многочисленных нулевых проверок.

Необязательный класс был введен в Java 8, чтобы обеспечить решение на уровне типа для представления необязательных значений вместо использования нулевых ссылок. До java 8 Необязательный класс является частью библиотеки Google Guava.

Давайте рассмотрим некоторые реализации с помощью java.util. Необязательно класс

Создание пустого объекта

Пустой необязательный объект может быть создан путем вызова empty статического метода необязательного класса.

@Test
public void createEmptyOptional() {
    Optional empty = 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";
    Optional opt = 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");
    Optional red = 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");
  Optional optionalColor= 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”