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

Исключение Throw in Необязательно в Java 8

Узнайте, как создать исключение из Java 8 Необязательно.

Автор оригинала: baeldung.

1. введение

В этом уроке мы покажем, как создать пользовательское исключение, когда Необязательный i s пустой.

Если вы хотите углубиться в Необязательно, взгляните на наше полное руководство здесь.

2. Необязательно.orElseThrow

Проще говоря, если значение присутствует, то isPresent() вернет true , а вызов get() вернет это значение. В противном случае он вызывает NoSuchElementException .

Существует также метод orElseThrow(Поставщик расширяет X> exceptionSupplier) , что позволяет нам предоставить пользовательский экземпляр исключения. Этот метод вернет значение только в том случае, если оно присутствует. В противном случае он вызовет исключение, созданное предоставленным поставщиком. расширяет X> exceptionSupplier)

3. В Действии

Представьте, что у нас есть метод, который возвращает нулевой результат:

public String findNameById(String id) {
    return id == null ? null : "example-name";
}

Теперь мы собираемся дважды вызвать наш метод findNameById(String id) и обернуть результат с помощью Необязательного , используя метод ofNullable(значение T) .

Необязательно предоставляет статический заводской метод для создания новых экземпляров . Этот метод называется nullable(значение T) . Тогда мы можем позвонить orElseThrow.

Мы можем проверить это поведение, выполнив этот тест:

@Test
public void whenIdIsNull_thenExceptionIsThrown() {
    assertThrows(InvalidArgumentException.class, () -> Optional
      .ofNullable(personRepository.findNameById(null))
      .orElseThrow(InvalidArgumentException::new));
}

Согласно нашей реализации, findNameById вернет null . Итак, новый Исключение InvalidArgumentException будет выброшено из метода orElseThrow .

Мы можем вызвать этот метод с ненулевым аргументом. Тогда мы не получим исключение InvalidArgumentException:

@Test
public void whenIdIsNonNull_thenNoExceptionIsThrown() {
    assertAll(() -> Optional
      .ofNullable(personRepository.findNameById("id"))
      .orElseThrow(RuntimeException::new));
}

4. Заключение

В этой краткой статье мы обсудили, как создать исключение из Java 8 Необязательно.

Как всегда, мы поместили исходный код на наш GitHub .