Java 8 referencias de métodos: proporcionar un Proveedor capaz de suministrar un resultado parametrizada


147

que me gustaría utilizar

java.util.Optional.orElseThrow() 

con un tipo de excepción que solicita un parámetro de constructor. Algo como esto:

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

¿Hay alguna manera de crear un proveedor que pase el valor de mi argumento?

+19

¿Por qué no se puede hacer 'orElseThrow (() -> lo nuevo MiExcepción (someArgument))'? 07 abr. 142014-04-07 15:51:04

289

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


17

Parece que solo puede lanzar RuntimeException desde el método orElseThrow. De lo contrario obtendrá un mensaje de error como MyException cannot be converted to java.lang.RuntimeException

+1

gracias, esto me estaba tirando cuando usé 'Optional' en groovy. Tratando de "arrojar Excepción" de un cierre maravilloso, pero falló con 'java.lang.reflect.UndeclaredThrowableException', lo cambió a' 'RuntimeException' y lo arregló. 12 abr. 152015-04-12 17:19:54

  0

Es bueno saber sobre eso. Afortunadamente en mi caso, estoy usando RuntimeExceptions, pero este no siempre es el caso. 25 jul. 172017-07-25 15:15:24


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