Optional判断非空的巨大优势!!

现在我给出一个场景例子,让友友们体会一下。

比如现在有一个业务就是,这个系统我弄成了多租户的形式,租户可以理解为分公司,为的就是给每个分公司都有不同的数据内容和权限。

然后现在我有一个客户表:customer,字段有code,name,tenant_code,note

然后我现在有一个需求就是我要获取当前租户对应的客户的名称,那么我们脑海中立马想到就是在customer表中查询tenant_code对应的name,sql语句自然而然就是这样写:

select name from customer where tenant_code = CURRENT_TENANT.

没错,是这么写。接下来我们在springboot中模拟一下。

这是我建的几个类。

po包下的CustomerPO.java:

dao包下的CustomerDao.java

因为这个案例比较容易,是获取单表的内容,所以这里dao接口里面没什么内容,直接利用service去做就可以。待会看看代码就知道了。

service包下的CustomerService.java:

service包下的impl包下的CustomerServiceImpl.java:

这里我就没写Controller了。那么现在我们看一下CustomerServiceImpl.java中的代码,可以发现if嵌套了两次,其实也还好,但是以后如果有越来越多的if嵌套,那肯定是会被领导吊的。

我们看看逻辑,如果查出来的实体customerPO不为空,我才去获取实体customerPO的name字段的值getName(),然后如果name的值也不为空,才返回这个name的值。其余情况如果第一个判断实体customerPO就为空,那么就直接返回“Not Found”;如果第二个判断name值也为空,也是直接返回“Not Found”。

那么现在我们用Optional来替换一下,看看Optional的强大之处。

看到没有,直接用一行代替了两个嵌套if。

现在我来说一下这段代码的大概意思:

在说之前我必须给大家讲清楚Optional.ofNullable(Object obj)到底干了什么事情。

让我们一起走进源码:

一看就是一个三元运算符。" ? : "它会判断我们传进的这个值是否是null,如果是null的话,就会返回empty()返回的值,如果不是null的话,就会返回of(value)的值。

继续:

我们看看empty()方法干了啥。

返回了一个t,这个t是EMPTY,继续看看EMPTY是什么。

发现它就是new了一个Optional()无参构造器对象。

我们看看of(T value)方法干了啥:

发现它也是new了一个Optional构造器对象,只不过现在是一个有参构造器,我们看看有参构造器Optional发生了什么:

发现了什么,它会把value的值赋值给成员变量value。

所以现在我们重新返回前面梳理一下Optional.ofNullable(T value)的整个流程。

如果我们传入的参数value是null的话,那么它就会new一个Optional对象,此时成员变量value是空的;

如果我们传入的参数value不是null的话,那么它就会new一个Optional对象,此时成员变量value就是我们传入的值。

例如我们这个例子Optional.ofNullable(customerPO),如果customerPO是null,成员变量value就是null的;如果customerPO不是null,成员变量value就是customerPO。

剩下map函数的源码我就不带大家一起看了,如果大家觉得我这里讲的好的话,可以评论或者后台私信,我再写一篇文章带大家走一遍map函数的源码。

判断customerPO实体是否为空?

如果为空的话,value就为空,那么在调用map映射的时候,此时map()方法会判断Optional成员变量value是否为null,此时是null,那么为null的话,就给成员变量赋值null,继续走后面的orElse("Not Found");orElse会去判断Optiaonal成员变量value的值是否为null,前面map赋值null,那么如果为null的话,就会返回Not Found。

如果不为空的话,value就不为空,那么在调用map映射的时候,此时map()方法会判断Optional成员变量value是否为null,此时不是null,那么不为null的话,就给成员变量value赋值getName()的结果,此时getName()的结果有可能为null的,继续走后面的orElse("Not Found"),orElse会去判断Optiaonal成员变量value的值是否为null,如果前面getName()返回的结果为null的话,就会返回Not Found。如果不为null的话,就会返回getName()的值。

总结:

Optional的强大之处,特别适合那种获取对象里面成员变量的值的判空。

最后:
如果大家觉得这篇文章对你们有所帮助的话,麻烦给个免费的赞赞,也祝各位码农在IT道路上高歌猛进,谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值