如何记录错误并在 orElseThrow() 子句中抛出异常?

How to Log error and throw an exception inside orElseThrow() clause?

我想记录错误并在 orElseThrow() 子句中抛出异常。我需要准备合适的供应商:

工作代码:

Optional<Integer> op = Optional.of(24832);
op.orElseThrow(() -> new RuntimeException());

如何记录错误并立即抛出异常:

op.orElseThrow({
        Logger.error("Incorrect value");
        () -> new RuntimeException();
        });

orElseThrow 需要一个 Supplier 作为参数:https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/Optional.html#orElseThrow(java.util.function.Supplier)

所以你可以使用任何一个

orElseThrow(RuntimeException::new)
orElseThrow(() -> new RuntimeException())

或者,如果您需要在 lambda 中添加其他代码,请使用常规代码块。由于您需要提供一个值,因此代码块需要 return 最后那个值:

orElseThrow(() -> {
    Logger.error("Incorrect value");
    return new RuntimeException();
})