判空的姿势你学废了么

我想大家在开发过程中遇到最多的问题便是NullPointerException即空指针异常了吧,空指针异常一般分为以下几种情况:

  1. object对象为null,为null的情况大多数都是上一步的查询方法没有查到结果,此时通过object来get其中的属性的时候会报异常
  2. 对象集合为空,然后get(0)或者遍历的时候没有获取到对象
  3. 字段值为null,此时又拿次字段去做比较还是什么,也会报异常

现在对常见情况进行详解

  • 对象为空的话我们常用的就是以下方式jdk的util包里的方法
Objects.isNull(obj)
Objects.nonNull(obj)
obj != null
obj == null
复制代码
  • 集合为空的话最常用的就是Spring里带的方法
CollectionUtils.isEmpty(list)
list.size() > 0
复制代码
  • 字段值为null的时候常用的是
Strings.isBlank(str)
StringUtil.isEmpty(str)
复制代码

前两种判空我就不做讲解了,下面就是着重讲一下第三种关于一些字段的判空

一般字段为空判断的都是String类型,或者数据库字段设置默认值为null或者空字符串 这个时候我们需要对字符串做处理,例如进行正则匹配什么的,如果是null或者是空字符串的话就会有问题,有一小部分人可能习惯了isEmpty方法,但是这种情况会很容易出现空字符串的问题,这个时候系统就会报异常了。下面我来给大家看一下两个方法的区别:

1.Strings.isBlank(str) --org.apache.logging.log4j.util 包

image.png 我们可以看到方法底层有两种判断方式,前面的就是我们常见的等于null判断,后面的方法我们先看一下trim()方法: image.png 源码具体的作用也是对字符串的前后部分的空格做了处理,删除了字符串最前面和尾部的空格,将中间的字符串包含空格(这个空格不是前面或者后面的空格)返回。 将字符串进行trim()方法处理空格后便进行isEmpty()方法处理了:

image.png 2.StringUtilS.isEmpty(str) ---org.apache.commons.lang3 包

​编辑​ 此时我们看一下apache的lang包下的判空少了个空格的处理, 由此可见我们以后再对字符串类型的字段处理的时候应该使用哪个方法都一清二楚了吧。

再补充一点:我们很多系统中都会有很多过滤条件,例如单号或者什么的也有很多是string类型的,我们在后台接收参数的时候可以先通过trim()方法将操作人误操作的前后空格给处理掉,然后再将处理后的参数放到筛选条件中进行筛选,这样保证用户的体验性。

提示:现在jdk的util包还有一个方法是Optional()方法,这个方法可以通过链式进行后续的一系列处理,功能挺全且好用,不过对于初级程序员可能阅读起来比较麻烦,我会在后面跳一个时间去针对这个进行详细介绍。

Optional(obj)
复制代码

好了,这篇文章到此结束了,如果有大佬还有更好的方法可以在评论区发表出来,谢谢~

如果感觉我这边文章写的不错的话欢迎三连,点赞、收藏、转发~

猜你喜欢

转载自juejin.im/post/7129444100213833742