Optional.orElseThrow() без Supplier
Использовать Optional.orElseThrow() как более ясную альтернативу get(), выражающую намерение.
Сравнение кода
✕ Java 8
// Risky: get() throws if empty, no clear intent
String value = optional.get();
// Verbose: supplier just for NoSuchElementException
String value = optional
.orElseThrow(NoSuchElementException::new);
✓ Java 10+
// Clear intent: throws NoSuchElementException if empty String value = optional.orElseThrow();
Заметили проблему в этом коде? Сообщите нам.
Почему современный подход лучше
Самодокументирующийся
orElseThrow() явно сигнализирует, что пустой результат не ожидается.
Без get()
Инструменты статического анализа помечают get() как рискованный; orElseThrow() является идиоматичным.
Меньше шаблонного кода
Не нужен Supplier для стандартного NoSuchElementException.
Старый подход
get() или orElseThrow(supplier)
Современный подход
orElseThrow()
Начиная с JDK
10
Сложность
Начинающий
Поддержка JDK
Optional.orElseThrow() без Supplier
Доступно
Доступно с JDK 10 (март 2018).
Как это работает
Optional.get() широко считается code smell, поскольку скрывает возможность сбоя. Метод orElseThrow() без аргументов, добавленный в Java 10, делает то же самое, но явно выражает намерение: разработчик ожидает значение и хочет получить исключение, если его нет.
Связанная документация
Доказательство