私はOptionalsで作業していて、奇妙な動作を経験しました。私はこれが本当にインテンテッドの "機能"なのか、それとも奇妙なのかを知りたいと思っています...orElse-分岐オプションで例外をスローする例外
ここに与えられた例があります: 私はオプションのあるorElseのメソッドを持っています。その他のオプション。他のオプションが存在しない場合、私はIllegalArgumentExceptionを上げるでしょう:
firstOptionalVar.orElse(secondOptionalVar.orElseThrow(IllegalArgumentException::new));
をが空のオプションであれば今、それはfirstOptionalVar
が存在する場合であっても、はIllegalArgumentExceptionが発生します。これは私にとっては正しいとは思わない。 firstOptionalVar
が存在しない場合、IllegalArgumentExceptionを発生させるだけです。
それはのようなjava7-方法でこの動作arroundの取得するには大したことではないです:
firstOptionalVar.isPresent() ? firstOptionalVar.get() : secondOptionalVar.orElseThrow(IllegalArgumentException::new);
は、他の誰の前に、この動作を経験していますか?これは本当にオプションが行動するべきか?
'flatMap'は残念なことに反対です。 – biziclop
例外に対するアンカーは、リンクされた質問または得られた回答で見つけることができます。実行したい "or"操作はJava 9で利用できることに注意してください:http://stackoverflow.com/questions/24599996/get-value-from-one-optional-or-another – Tunaki
あなたの答えをありがとう。 @resuemanの解決策は私にとってはうまくいくはずですが、java9がこのケースをどのように処理するかを知ることは良いことです:) – Numbernick