JAVA 8 中的 orElseThrow 方法如何抛出异常?

How Exception will be thrown from orElseThrow method in JAVA 8?

我有一个名为 isExist 的字段,它在第 1 行中为假或真。 基于此,在第 2 行中,要么执行 Optional.empty() 要么执行 Optional.of(1) 但永远不会从 orElseThrow 方法中抛出异常#2.

谁能解释一下什么时候会抛出异常?在什么情况下会抛出异常?

line#1 final boolean isExist  = (user != null && CollectionUtils.isNotEmpty(user.getIds())
                && user.getIds().contains(id));

line#2 (isExist ? Optional.empty() : Optional.of(1)).orElseThrow(
                () -> new Exception());

从第 1 行开始,它将 true/false 分配给 isExist 变量。

所以这里有2种可能性。

isExist = true or isExist = false;

第2行,三级条件可以理解为:

Optional optional = null;
if(isExist){
   optional = Optional.empty();
}else{
   optional = Optional.of(1)
}
optional.orElseThrow(() -> new Exception());

orElseThrow 仅在可选变量为空时抛出异常,即 isExist = true 时。如果 isExist = false,则什么也不会发生。 您可以查看下面的签名以了解 orElseThrow 的基本概念 ...

public void orElseThrow(Exception ex){
  if(!isPresent()){
     throw ex;
  }
}

不要为此使用 Optional。只是没有必要。使用简单的命令式代码:

if (!isExist) {
  throw new Exception();
}
// You don't show what you do with the result, but presumably you do something
// like return or assign to a variable:
return 1;