web-dev-qa-db-fra.com

Java 8 références de méthodes: fournir un fournisseur capable de fournir un résultat paramétré

Je voudrais utiliser

Java.util.Optional.orElseThrow()

avec un type d'exception qui demande un paramètre de constructeur. Quelque chose comme ça:

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

Existe-t-il un moyen de créer un fournisseur qui transmet la valeur de mon argument?

239
mdo

Sûr. orElseThrow(() -> new MyException(someArgument)).

458
Louis Wasserman

Il semble que vous ne pouvez lancer que RuntimeException à partir de la méthode orElseThrow. Sinon, vous obtiendrez un message d'erreur du type MyException cannot be converted to Java.lang.RuntimeException

22
Manu
optionalUsers.orElseThrow(() -> new UsernameNotFoundException("Username not found"));
6
Ashish Pushp