爪哇8方法参考:提供一种能够供给一个参数化结果


147

的供应商我想使用

java.util.Optional.orElseThrow() 

与询问构造参数的异常类型。这样的事情:

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

有没有办法创建一个供应商,传递我的参数值?

+19

的错误信息为什么不能这样做'orElseThrow(() - >新MyException(someArgument))'? 07 4月. 142014-04-07 15:51:04

289

当然。 orElseThrow(() -> new MyException(someArgument))


17

看起来您只能从方法orElseThrow中抛出RuntimeException。否则,你会得到像MyException cannot be converted to java.lang.RuntimeException

+1

谢谢,在常规中使用'Optional'时,这会让我失望。尝试从常规闭包中抛出Exception,但是失败了java.lang.reflect.UndeclaredThrowableException,修改为RuntimeException。 12 4月. 152015-04-12 17:19:54

  0

对此很有帮助。幸运的是,在我的情况下,我使用了RuntimeExceptions,但情况并非总是如此。 25 7月. 172017-07-25 15:15:24


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