2016-08-01 64 views
2

如果a是可选的[123]并且b是可选的[空白]。Java 8可选的orElse orElseThrow不一致

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