不知道大家有没有在项目中遇到过类似这样的代码,有时候复杂的业务判断就会造成类似这样的代码,看的真是令人头大。那么有没有一种优雅的办法来去除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());
}
本文暂时没有评论,来添加一个吧(●'◡'●)