再见NPE之“优雅判空”

NPE向来是一个让java程序员头疼的问题,如何优雅的处理它?

判空灾难

首先想到的肯定是判空,增加代码健壮性,但带来的问题是,代码里大量的充斥着
在这里插入图片描述
及其不优雅,如何解决找个问题?

善用轮子

对于各种判空,前辈们已经造好了很多轮子,下面就是我的一些用到的,有其他的大家评论区见(会同步更新到文章)加粗为最常用的

  • String类型判空
    对于字符串类型的判空就有很多了如:
  1. 谷歌的guava的Strings
    在这里插入图片描述
  2. 最常用的apache的StringUtils
    在这里插入图片描述
  3. spring 的StringUtils(可以判断对象)
    在这里插入图片描述
  • 对象类型判空
    对象类型的判空除了上边那个外还有:
  1. java.util的Object
    在这里插入图片描述
  2. spring的ObjectUtils
    在这里插入图片描述
  3. apache的ObjectUtils(lang3版本)
    在这里插入图片描述
  • 集合类判空
    集合类包含判空和判断内容是否为空
  1. apache的CollectionUtils
    在这里插入图片描述
  2. spring的CollectionUtils
    在这里插入图片描述
  3. java自带的isEmpty(只能判断没有值)
    在这里插入图片描述
  • Map判空
  1. apache的MapUtils
    在这里插入图片描述

使用java8的Optional

java8引入了对空对象的操作,直接避免了空指针异常,但其应用范围没有那么广,适应于对空值的处理,但并不适用于一些if-else的情况,所以其无法彻底代替if-else(filter功能可能可以代替),关于Optional的更多请参考我的关于Optional的文章

  • 最常用的
    使用Optional.ofNullable()来包装一个可能为空的对象
    使用orElseGet或者orElse来处理空值,使用ifPresent来处理不为空要执行的内容
示例
  • orElse
    在这里插入图片描述
    orElse用来处理有默认值的情况其接收一个判断类型的默认值,表示当判断对象为空的时候返回,上面代码表示当key是空的时候返回"0"
  • orElseGet
    在这里插入图片描述
    orElseGet与orElse的区别就是前者接收一个函数,大大的扩展了使用场,最重要的区别是前者效率高,因为当对象不为null的时候前者括号里的东西根本不执行,上面代码表示当data的那个键对应的值为空的时候记录日志并返回"0"
  • ifPresent
    在这里插入图片描述
    该方法用来处理当判断对象不为空要执行的操作,上面代码表示不为空时打印结果
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值