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


147

Je voudrais utiliser

java.util.Optional.orElseThrow() 

avec un type d'exception qui demande un paramètre du constructeur. Quelque chose comme ceci:

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

est-il un moyen de créer un fournisseur qui passe ma valeur d'argument dans?

+19

Pourquoi ne pouvez-vous faire 'orElseThrow (() -> nouveau MyException (someArgument))'? 07 avril. 142014-04-07 15:51:04

289

Bien sûr. orElseThrow(() -> new MyException(someArgument)).


17

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

+1

merci, cela me jetait en utilisant 'Optional 'dans groovy. Essayer de "jeter Exception" à partir d'une fermeture groovy, mais il a échoué avec 'java.lang.reflect.UndeclaredThrowableException', en changeant à une exception RuntimeException le corrigé. 12 avril. 152015-04-12 17:19:54

  0

Bon à savoir à ce sujet. Heureusement dans mon cas, j'utilise RuntimeExceptions, mais ce n'est pas toujours le cas. 25 juil.. 172017-07-25 15:15:24


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