Бросать исключение в опционально в Java 8
1. Вступление
В этом уроке мы собираемся показать, как генерировать пользовательское исключение, когдаOptional is пусто.
Если вы хотите глубже изучить долюOptional, , взгляните на наш полныйguide здесь.
2. Optional.orElseThrowс
Проще говоря, если значение присутствует, тоisPresent() вернетtrue, а вызовget() will вернет это значение. В противном случае он выбрасываетNoSuchElementException.
Также существует методorElseThrow(Supplier<? extends X> exceptionSupplier), который позволяет нам предоставить собственный экземпляр Exception. Этот метод вернет значение, только если оно есть. В противном случае будет выдано исключение, созданное предоставленным поставщиком.
3. В бою
Представьте себе, чтоwe have a method which returns a nullable result:
public String findNameById(String id) {
return id == null ? null : "example-name";
}
Теперь мы собираемся дважды вызвать наш методfindNameById(String id) и заключить результат вOptional с помощью методаofNullable(T value).
Optional provides a static factory method for creating new instances. Этот метод называетсяofNullable(T value). Тогда мы можем вызватьorElseThrow.
Мы можем проверить поведение, выполнив этот тест:
@Test
public void whenIdIsNull_thenExceptionIsThrown() {
assertThrows(InvalidArgumentException.class, () -> Optional
.ofNullable(personRepository.findNameById(null))
.orElseThrow(InvalidArgumentException::new));
}
Согласно нашей реализацииfindNameById will returnnull. Таким образом, новыйInvalidArgumentException будет выведен из метода orElseThrow .
Мы можем вызвать этот метод с ненулевым аргументом. Тогда мы не получимInvalidArgumentException:
@Test
public void whenIdIsNonNull_thenNoExceptionIsThrown() {
assertAll(() -> Optional
.ofNullable(personRepository.findNameById("id"))
.orElseThrow(RuntimeException::new));
}
4. Вывод __
В этой быстрой статье мы обсудили, как вызвать исключение из Java 8Optional.
Как всегда ставим исходный кодon our GitHub.