我有一个名为isExist的字段,它在第1行中为false或true。基于此,在line#2中,执行Optional.empty()或执行Optional.of(1),但从line#2中的orElseThrow方法中不会抛出异常。
谁能解释一下什么时候会抛出异常?在何种情况下将引发异常?
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());
发布于 2021-12-09 12:32:30
在line1中,它将把true/false赋值给isExist变量。
我们这里有两种可能性。
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;
}
}
发布于 2021-12-09 13:02:37
不要为此使用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;
https://stackoverflow.com/questions/70289609
复制相似问题