Java如何优雅地判断对象是否为空

这篇具有很好参考价值的文章主要介绍了Java如何优雅地判断对象是否为空。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

点击下载《Java如何优雅地判断对象是否为空》文章来源地址https://www.toymoban.com/news/detail-860455.html

1. 前言

在实际项目中,我们经常需要对各种变量或对象进行判空校验。这是因为,如果不进行判空校验,当遇到空值时,可能会导致程序出现NullPointerException异常。这是一种常见的运行时异常,它会在试图访问或操作空对象引用时发生。为了避免这种异常的出现,我们需要在使用变量或对象之前,进行仔细的判空校验,以确保它们的值是有效的,或者它们不是空值。通过进行判空校验,我们可以更好地保证程序的稳定性和可靠性,避免潜在的错误和异常。

2. 如何判断为null

2.1 常用判断

判断一个对象是否为null有多种方式。除了你提到的java.util中的Objects.nonNull(obj)和hutool中的ObjectUtil,还有其他一些常见的方法。以下是这些方法的详细描述:

  1. java.util.Objects.nonNull(obj)
    这是Java标准库提供的一种方法,它检查给定的对象是否为null。如果对象不为null,则返回true;否则返回false。
  2. hutool中的ObjectUtil
    Hutool是一个Java工具包,提供了许多实用的工具方法。ObjectUtil类中也有一个判断对象是否为null的方法。使用Hutool的ObjectUtil,你可以像这样检查一个对象是否为null:ObjectUtil.isNotNull(obj)
  3. null != obj
    这是一种传统的比较方式,直接使用"!="运算符来检查一个对象是否为null。如果obj不为null,则表达式的结果为false;如果obj为null,则表达式的结果为true。

2.2 List的判空

像List这种比较特殊的在项目中可能不仅仅是判断非空了。对于List来说不等于null和List.size()不等于0是两回事,公司也有实习生常常有把这两个混淆的情况,list不等于null说明已经初始化了,堆内存中有一块属于它的地盘,而size为0说明还没往里面放东西,举个例子说就是不等于null代表我现在有个瓶子,size大于0说明我向瓶子里装水了。

来看一下源码:

public boolean isEmpty(List list) {
     if (list != null && list.size() > 0) {
         return false;
     } else {
         return true;
     }
 }

相当于判断瓶子里有没有水(前提是瓶子已经存在,若瓶子不存在,则会抛出NullPointerException异常)。

所以通常情况下会连用list != null && list.size > 0 来判断,或者直接使用HuTool中CollUtil工具的isEmpty。诸如此类的还有Set、Map等。

2.3 String的判空

这里还是用瓶子与水的概念,String为null时调用equals(String) 或 length() 等操作抛出 java.lang.NullPointerException。

private void test() {
    String str1 = null;
    //这里将抛出异常
    if (str1.equals("")) {
    }

    //这里将抛出异常
    if (str1.length() > 0) {
    }
}

针对字符串判空有以下几种方式:

1、大多数人使用的方法之一,直观,方便,但效率低下:

if(a == null || a.equals(""));

2、比较字符串长度,高效:

if(a == null || a.length() == 0);

3、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

2.4 Optional

Optional的出现就是用来防止NullpointException的。常见的方法有:

  • .empty() 创建一个空的Optional实例
  • .of(T t): 创建一个Optional 实例,为null时报异常
  • .ofNullable(T t): 若t 不为null,创建Optional 实例,否则创建空实例
  • isPresent(): 判断容器中是否有值
  • ifPresent(Consume lambda) 容器若不为空则执行括号中的Lambda表达式
  • orElse(T t): 获取容器中的元素,若容器为空则返回括号中的默认值
  • orElseGet(Supplier s): 如果调用对象包含值,返回该值,否则返回s 获取的值
  • orElseThrow(): 如果为空,就抛出定义的异常,如果不为空返回当前对象
  • map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
  • flatMap(Function mapper): 与map 类似,要求返回值必须是Optional
  • T get() 获取容器中的元素,若容器为空则抛出NoSuchElement异常

先看个常见的示例:

baseInfo类中有布尔类型的属性,是空返回false,不为空取其值,需要四行。

boolean blind = false;
if (null != baseInfo.getBlind()) {
    blind = baseInfo.getBlind();
}

当使用Optional时,一行搞定,非常的优雅。

boolean blind = Optional.ofNullable(baseInfo.getBlind()).orElse(false);

Java中的Optional 是一个可以为null的容器对象。如果值存在则isPresent()方法返回true。调用get()方法会返回该对象。

创建Optional对象的方式有三种:

  1. 创建一个空的Optional对象:Optional.empty()。
  2. 使用非null值创建Optional对象:Optional.of(T value)。
  3. 使用任意值创建Optional对象:Optional.ofNullable(T value)。

Optional对象的使用场景主要是处理空指针异常的情况,相当于一个容器,当往里面存放对象时,如果对象为空(null),Optional会返回一个空的Optional实例,反之会返回一个非空的Optional实例。

以下是使用Optional对象的示例:

Optional<String> optional = Optional.ofNullable("test");  
optional.isPresent();           // true  
optional.get();                 // "test"  
optional.orElse("fallback");     // "test"  
  
optional.ifPresent((s) -> System.out.println(s.charAt(0)));     // "t"

以上代码中,首先创建了一个包含字符串"test"的Optional对象。然后使用isPresent()方法检查该值是否为null,使用get()方法获取该值。接下来使用ifPresent()方法检查值是否存在,如果存在则执行lambda表达式中的代码。在这个例子中,输出结果是"t"。

总结来说,Java中的Optional对象可以用于避免空指针异常的情况,它提供了一种更优雅、更简洁的方式来处理可能为空的值。

3. 总结

每种方法都有其适用的场景,链式编程也不例外。虽然它可以使代码更优雅,但可能会降低逻辑性和可读性。因此,在项目中使用时,需要根据具体情况慎重考虑。

点击下载《Java如何优雅地判断对象是否为空》

到了这里,关于Java如何优雅地判断对象是否为空的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java如何优雅的进行判空

    实际项目中我们会有很多地方需要判空校验,如果不做判空校验则可能产生NullPointerException异常。 针对异常的处理我们在上一篇有提及: 先来看一下实际项目中一些判空方式 通常我们判断一个对象是否为Null,可以使用java.util中的Objects.nonNull(obj)、hutool中的ObjectUtil或者直接

    2024年02月09日
    浏览(36)
  • 代码优雅之道——Java如何判空?

    实际项目中我们会有很多地方需要判空校验,如果不做判空校验则可能产生NullPointerException异常。 针对异常的处理我们在上一篇有提及: 先来看一下实际项目中一些判空方式 通常我们判断一个对象是否为Null,可以使用java.util中的Objects.nonNull(obj)、hutool中的ObjectUtil或者直接

    2024年02月15日
    浏览(39)
  • 浅谈Java判断变量是否为空的问题

      Java的StringUtil.isEmpty(str)和\\\"\\\".equals(str)都是用来判断字符串是否为空的方法,但它们有一些不同的使用场景。 📌 StringUtil.isEmpty()   StringUtil.isEmpty(str)通常用于判断字符串是否为null或者长度为0,如果字符串为null或者长度为0,则返回true,否则返回false。这种方式适用于需

    2023年04月11日
    浏览(89)
  • 微信小程序判断对象是否存在或为空

    要取节点data.result.image的值,正常情况下有该节点如下图所示  但出错的情况下该节点不存在,直接取会出错 所以添加节点是否存在和是否为空的判断,存在且不为空时才显示  测试发现通过typeof判断节点是否存在时要一层层判断,如果data.result已经不存在,直接判断data.re

    2024年02月04日
    浏览(49)
  • JavaScript判断对象是否为空对象的几种方法

    目录 1、空对象对应的字符串为 \\\"{}\\\" 2、for in 3、jquery 的 isEmptyObject()方法 4、Object.getOwnPropertyNames() 5、ES6 的 Object.keys() JSON.stringify()扩展 1、第一大特性 小结 2、第二大特性 3、第三大特性 4、第四大特性 5、第五大特性 6、第六大特性 7、第七大特性 8、第八大特性 var data = {}; v

    2024年01月16日
    浏览(67)
  • 【Java-Util】Hutool工具类判断字符串、对象为空的使用

    判断字符串、包装类、集合、对象是否为空。 字符串工具-StrUtil (hutool.cn) str1为null,str2是字符串,str3为空字符串,str4是包含不可见字符(空格等)的字符串。 使用 StrUtil.isEmpty(str) 和 StrUtil.isBlank(str) 总结: isBlank与 isEmpty(CharSequence) 的区别是: isBlank方法会校验空白字符,且

    2024年02月02日
    浏览(100)
  • 《深入理解Java虚拟机》读书笔记:判断对象是否存活

    本节内容的概要如下; 对象已死吗?   给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。 客观地说,引用计数算法(Reference Counting)的实现简单,判定效率也很高,在

    2024年02月14日
    浏览(51)
  • Java判断List集合中的对象是否包含有某一元素

    关于以下方法,直接可以在自己项目创建一个类,然后进行测试使用!文本末尾也提供了每个方法的运行结果,供大家参考使用! 文章大量使用到了Java8当中的Lambda表达式,以及stream流相关基础知识。如果您用的不熟,没关系,可以直接复制下面的方案然后进行套着使用即可

    2024年02月11日
    浏览(61)
  • Java中如何判断是否为闰年

    ✨ 博主: 命运之光 ✨ 专栏: Java经典程序设计   目录 ✨介绍 🍓引言:闰年的定义和在编程中的应用 🍓目的:介绍如何使用Java编写一个函数来判断年份是否为闰年 ✨闰年的条件 ✨提供数学原理和背景知识 🍓判断是否为闰年的Java代码 ✨示例和测试 ✨总结 前言: Java中

    2024年02月02日
    浏览(37)
  • Java如何判断某文件目录是否存在

    在java中如何判断某文件所在的目录是否存在,若不存在创建目录 可以通过国使用 File 类的 getParentFile() 方法来获取文件所在的目录,并通过 exists() 方法来判断该目录是否存在,若不存在,通过 mkdirs() 方法创建目录,以下为实例 或直接简写

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包