java 空值_Java简洁之道:别让空值处理那么“难堪”

在编程中,最经常遇到的异常是空指针异常(java.lang.NullPointerException

),根据某个业务场景,我们就会编写如下的代码,并使用if……else.判断对象是否为空。

e3da1e0bfaebd1f3821769bc38add5a0.png

0ea8f092de00784c5cb9638a959769c9.png传统的空值处理逻辑

可以明显地看到,无休止的if判断让程序变得臃肿、冗长。

这个问题怎么解决呢,来看看Optional类是如何处理的,如下。

084c7956284dbb50ed0f3ee0c309c044.pngOtional处理空值

可以看到,使用Otional类处理空值让我们体验到了流式编程的快乐,简洁,又不失功能性。

Optional类是什么?Optional类是Java 8引入的一个新特性,目的就是为了处理臭名昭著的空指针异常(NullPointerException)。它是一个可以为null的容器对象,使用可选值代替null来解决空指针异常的问题,看一下它提供了哪些实用的操作。

1.static Optional ofNullable(T value)

该操作实现:如果对象为空,返回一个空的Optional,若不为空,返回Optional包装的值。

9ade148dce7ef3e9c4e19380d969d628.pngofNullable操作

2.boolean isPresent()

该操作实现:如果对象存在值,返回true;否则返回false。

04118b8a7ffd7c71237c03152fe6583c.pngisPresent操作

3.static Optional of(T value)

该操作实现:返回一个非null的Optional,即使用of创建Optional对象时,参数不能为空。

4.void ifPresent(Consumer super T> consumer)

该操作实现:如果参数值存在,调用consummer,否则不做任何处理。进行非空条件处理时非常好的方法,如下所示,

12d0536ed7a7d5ea2fbb7ce3730ef4f4.pngifPresent操作

5.T orElse(T other)

该操作实现:如果对象存在该值,返回该值, 否则返回 传入参数,一个最常使用的空值处理操作。

86cf792adb78d889a6891ac73800eebc.pngorElse操作

6.T orElseGet(Supplier extends T> other)

该操作实现:如果对象存在该值,返回该值, 否则调用Supplier实例中的get方法,方法的返回值为orElseGet的返回值。

6af5216f99408d56f137835756e9e298.pngorElseGet操作

7. orElseThrow()

该操作实现:如果对象存在值,返回包含的值,否则抛出异常。

8.filter()

该操作实现:filter() 用于对 Optional 封装的对象进行过滤,filter 返回一个Optional 对象。如果被封装的值通过过滤则返回Optional 本身,否则返回一个空的 Optional 对象。

e2859b5360db83a491581b1c14087c2b.pngfilter操作

9.map()

该操作实现:如果对象有值,调用映射函数得到返回值。如果返回值不为 null,则使用Optional将封装映射函数的返回值并作为map操作的返回值,否则返回空Optional。

2573969ccf2d511d2bd6be7d0681aac2.pngmap操作

当然,Optional类还有其他几种方法,可以在日常的编程过程中进行更加深入的实践。Optional类为我们提供了非常优雅的处理空值的方法,并且为程序员提供了一种更优异的流式编程的方法,但是切记,不要为了流式编程而一味任意使用Optional类,今后我会写一些Optional类中的坑。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值