2014-04-07 25 views
147

mi piacerebbe utilizzareJava 8 Metodo di riferimento: fornire un fornitore in grado di fornire un risultato con parametri

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))'? –

risposta

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. –

+0

Buono a sapersi. Fortunatamente nel mio caso, sto usando RuntimeExceptions, ma questo potrebbe non essere sempre il caso. – hbobenicio

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