Java 8 Metodo di riferimento: fornire un fornitore in grado di fornire un risultato con parametri


147

mi piacerebbe utilizzare

java.util.Optional.orElseThrow() 

con un tipo di eccezione che chiede un parametro del costruttore. Qualcosa del genere:

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

C'è un modo per creare un fornitore che superi il valore del mio argomento in?

+19

Perché non si può fare 'orElseThrow (() -> nuova MyException (someArgument))'? 07 apr. 142014-04-07 15:51:04

289

Sicuro. orElseThrow(() -> new MyException(someArgument)).


17

Sembra che sia possibile lanciare solo RuntimeException dal metodo orElseThrow. In caso contrario, si otterrà un messaggio di errore come MyException cannot be converted to java.lang.RuntimeException

+1

grazie, questo mi ha stancato usando "Optional" in groovy. Cercando di "lanciare Exception" da una chiusura groovy, ma non è riuscito con 'java.lang.reflect.UndeclaredThrowableException', la modifica a' RuntimeException' l'ha corretta. 12 apr. 152015-04-12 17:19:54

  0

Buono a sapersi. Fortunatamente nel mio caso, sto usando RuntimeExceptions, ma questo potrebbe non essere sempre il caso. 25 lug. 172017-07-25 15:15:24


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