Рекомендации по методу Java 8: предоставить Поставщик, способный предоставить параметризованный результат

Я хотел бы использовать

java.util.Optional.orElseThrow()

с типом Exception, который запрашивает параметр конструктора. Что-то вроде этого:

orElseThrow(MyException::new(someArgument)) // obviously NOT working

Есть ли способ создать поставщика, который передает значение моего аргумента в?

Ответ 1

Конечно. orElseThrow(() -> new MyException(someArgument)).

Ответ 2

Похоже, что вы можете выбросить только RuntimeException из метода orElseThrow. В противном случае вы получите сообщение об ошибке, например MyException cannot be converted to java.lang.RuntimeException

Обновление: - Это была проблема со старой версией JDK. Я не вижу этой проблемы с последними версиями.

Ответ 3

optionalUsers.orElseThrow(() -> new UsernameNotFoundException("Username not found"));