专业的编程技术博客社区

网站首页 > 博客文章 正文

Optional让你的代码看起来更优雅!

baijin 2025-03-07 15:52:58 博客文章 130 ℃ 0 评论

不知道大家有没有在项目中遇到过类似这样的代码,有时候复杂的业务判断就会造成类似这样的代码,看的真是令人头大。那么有没有一种优雅的办法来去除if-else呢?Optional他来了(请升级你的JDK版本为1.8以上哦)


我的表情


上面的代码怕是浮现不了咯,我们来做一个简单的示范吧:

以下是原始代码:

//声明一个创建对象的方法
private static InputParaDTO creatDTO() {
        InputParaDTO query = new InputParaDTO<>();
        ExtraDTO extra = new ExtraDTO();
        query.setExtra(extra);
        extra.setPageSize("1");
        return query;
}
//写一个main方法
public static void main(String[] args) {
  			//创建一个对象
        InputParaDTO query=creatDTO();
        System.out.println(check3(query));
}
//写一个校验方法,判断创建对象过程中有没有空的判断
private static String check(InputParaDTO query){
        if (Objects.nonNull(query)){
            ExtraDTO extra = query.getExtra();
            if (Objects.nonNull(extra)) {
                return extra.getPageSize();
            }
        }
        throw new RuntimeException("有null异常");
}
   

接下来让我们用Optional实现一下:

方式一:

//这种情况下,若获取字符串过程中有空值情况,则会抛出异常
private static String check1(InputParaDTO query){
  return Optional.ofNullable(query).map(InputParaDTO::getExtra).map(ExtraDTO::getPageSize).orElseThrow(() -> {
     throw new RuntimeException("有null异常");
  });
}

方式二:

//这种情况下,若获取字符串过程中有空值情况,则会调用aa方法返回默认的值,但是需要注意的是:
//即便没有空值的情况,orElse中的aa方法也会执行,只是不返回默认值
private static String check2(InputParaDTO query){
  return Optional.ofNullable(query).map(InputParaDTO::getExtra).map(ExtraDTO::getPageSize).orElse(
    aa());
}
private static String aa(){
  System.out.println("测试有没有执行");
    return "2232323";
}

方式三:

//这种情况下,若获取字符串过程中有空值情况,则会调用aa方法返回默认的值,但不会像方式二一样在不为空的情况下调用默认方法
private static String check3(InputParaDTO query){
  return Optional.ofNullable(query).map(InputParaDTO::getExtra).map(ExtraDTO::getPageSize).orElseGet(()->aa());
}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表