Java 8可选orElse orElseThrow不一致

Jor*_*Jor 2 java optional java-8

如果a是Optional [123],b是Optional [empty].

a.orElse(b.orElseThrow(() -> new UnexpectedInternalException(
                    "Error")))
Run Code Online (Sandbox Code Playgroud)

它为什么扔?

Dan*_*acs 5

因为首先评估参数.这与Optional无关......


Era*_*ran 5

orElse()是一个方法,在执行该方法之前,会对其参数进行求值.在这种情况下,参数(b.orElseThrow(() -> new UnexpectedInternalException("Error")))的评估会引发异常.