1、前言 实际项目中我们会有很多地方需要判空校验,如果不做判空校验则可能产生NullPointerException异常。 针对异常的处理我们在上一篇有提及: 先来看一下实际项目中一些判空方式 通常我们判断一个对象是否为Null,可以使
实际项目中我们会有很多地方需要判空校验,如果不做判空校验则可能产生NullPointerException异常。
针对异常的处理我们在上一篇有提及:
先来看一下实际项目中一些判空方式
通常我们判断一个对象是否为Null,可以使用java.util中的Objects.nonNull(obj)、hutool中的ObjectUtil或者直接 null != obj
像List这种比较特殊的在项目中可能不仅仅是判断非空了。对于List来说不等于null和List.size()不等于0是两回事,公司也有实习生常常有把这两个混淆的情况,list不等于null说明已经初始化了,堆内存中有一块属于它的地盘,而size为0说明还没往里面放东西,举个例子说就是不等于null代表我现在有个瓶子,size大于0说明我向瓶子里装水了。
实际项目中也发现有直接用list.isEmpty()去判断的,来看一下源码:
相当于判断瓶子里有没有水(前提是瓶子已经存在,若瓶子不存在,则会抛出NullPointerException异常)。
所以通常情况下会连用list != null && list.size > 0 来判断,或者直接使用HuTool中CollUtil工具的isEmpty。诸如此类的还有Set、Map等
这里还是用瓶子与水的概念,String为null时调用equals(String) 或 length() 等操作抛出 java.lang.NullPointerException。
针对字符串判空有以下几种方式:
大多数人使用的方法之一,直观,方便,但效率低下:
if(a == null || a.equals(""));
比较字符串长度,高效:
if(a == null || a.length() == 0);
Java SE 6.0 才刚刚开始提供,效率和方法二差不多:
if(a == null || a.isEmpty());
当然还可以使用org.apache.commons.lang.StringUtils工具。
StringUtils.isNotBlank(a);
* StringUtils.isNotBlank(null) = false
* StringUtils.isNotBlank("") = false
* StringUtils.isNotBlank(" ") = false
* StringUtils.isNotBlank("bob") = true
* StringUtils.isNotBlank(" bob ") = true
该工具类中还有个isNotEmpty()方法,从注释可以很明显看出二者的差别
StringUtils.isNotEmpty(a);
* StringUtils.isNotEmpty(null) = false
* StringUtils.isNotEmpty("") = false
* StringUtils.isNotEmpty(" ") = true
* StringUtils.isNotEmpty("bob") = true
* StringUtils.isNotEmpty(" bob ") = true
Optional的出现就是用来防止NullpointException的。常见的方法有:
先看个常见的示例:
baseInfo类中有布尔类型的属性,是空返回false,不为空取其值,需要四行。
当使用Optional时,一行搞定,非常的优雅。
public final class Optional { private static final Optional> EMPTY = new Optional<>(); private final T value; //可以看到两个构造方格都是private 私有的 //说明 没办法在外面new出来Optional对象 private Optional() { this.value = null; } private Optional(T value) { this.value = Objects.requireNonNull(value); } //这个静态方法大致 是创建出一个包装值为空的一个对象因为没有任何参数赋值 public static Optional empty() { @SuppressWarnings("unchecked") Optional t = (Optional) EMPTY; return t; } //这个静态方法大致 是创建出一个包装值非空的一个对象 因为做了赋值 public static Optional of(T value) { return new Optional<>(value); } //这个静态方法大致是 如果参数value为空,则创建空对象,如果不为空,则创建有参对象 public static Optional ofNullable(T value) { return value == null ? empty() : of(value); }}复制代码
场景1:在service层中 查询一个对象,返回之后判断是否为空并做处理
场景2:使用Optional 和函数式编程,一行搞定
每种方法的存在必然有适用的场景,有些情况下这种链式编程,虽然代码优雅了。但是,逻辑性没那么明显,可读性有所降低,大家项目中看情况酌情使用。
来源地址:https://blog.csdn.net/ww2651071028/article/details/130335753
--结束END--
本文标题: Java如何优雅的进行判空
本文链接: https://lsjlt.com/news/397316.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-01
2024-04-03
2024-04-03
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0