Java 8 可选orElse orElseThrow 不一致

Java 8 Optional orElse orElseThrow inconsistent

如果 a 是可选的[123] 并且 b 是可选的[空]。

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

为什么会抛出?

因为首先评估参数。这与可选无关...

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