のJava 8メソッド参照:Iコンストラクタパラメータを要求する例外の種類と</p> <pre><code>java.util.Optional.orElseThrow() </code></pre><p>を使用したいパラメータ化された結果


147

を供給できるサプライヤーを提供します。このようなもの:

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

groovyで 'Optional'を使うと、これは私を捨ててしまいました。 'グルーヴィーな閉鎖からException'を投げしようとしているが、それは' RuntimeException'がそれを固定に変更し、java.lang.reflect.UndeclaredThrowableException' 'で失敗しました。 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"));