Optional.orElseThrow()
Возвращает значение или бросает исключение, если его нет.
Доступно с: Java 10
Синтаксис
T orElseThrow()
<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws XПараметры
| Параметр | Тип | Описание |
|---|---|---|
| exceptionSupplier | Supplier<? extends X> | Необязательно: создаёт исключение для пустого случая (Java 8). |
Возвращаемое значение
TЗначение из `Optional`.
Примеры
Своё исключение с понятным сообщением:
record User(int id, String name) {}
User findUser(int id) {
return Stream.of(new User(1, "Anna"), new User(2, "Oleg"))
.filter(u -> u.id() == id)
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("No user with id " + id));
}
void main() {
IO.println(findUser(2).name());
try {
findUser(7);
} catch (IllegalArgumentException e) {
IO.println(e.getMessage());
}
}Результат:
Oleg
No user with id 7Примечания
Версия без аргументов (Java 10) бросает NoSuchElementException с сообщением No value present и делает то же, что get(), но с говорящим названием. Используйте её, когда отсутствие значения — ошибка программы.
См. также
- Optional.orElse() — Возвращает значение или запасной вариант, если значения нет.
- IllegalArgumentException — Сообщает, что метод получил недопустимый аргумент.
- Optional.isPresent() — Проверяет, есть ли значение в `Optional`.
В учебнике
- Optional — Класс Optional в Java: значение, которого может не быть, создание через of и empty, orElse, map, ifPresent и orElseThrow.