2016-08-01 11 views
2

aがオプション[123]で、bがオプション[空]の場合。Java 8オプションorElseまたはElseThrowが矛盾します

a.orElse(b.orElseThrow(() -> new UnexpectedInternalException(
        "Error"))) 

なぜそれはスローされますか?

+0

それは何も投げません – Andrew

+4

あなたは何をすることを期待しましたか? 'orElseThrow()'メソッドは、 'Optional'が存在しない場合にスローされるように設計されています... – fge

答えて

5

orElse()がメソッドであり、そのメソッドが実行される前にその引数が評価されます。この場合、引数の評価(b.orElseThrow(() -> new UnexpectedInternalException("Error")))は例外をスローします。

+0

完璧な意味合いがあります – Jor

5

パラメータが最初に評価されるためです。これはオプションとは関係ありません。

+0

完璧な意味を持っています – Jor