返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java如何优雅的进行判空
  • 277
分享到

Java如何优雅的进行判空

javajvmservlet 2023-09-06 17:09:47 277人浏览 泡泡鱼
摘要

1、前言 实际项目中我们会有很多地方需要判空校验,如果不做判空校验则可能产生NullPointerException异常。 针对异常的处理我们在上一篇有提及: 先来看一下实际项目中一些判空方式 通常我们判断一个对象是否为Null,可以使

1、前言

实际项目中我们会有很多地方需要判空校验,如果不做判空校验则可能产生NullPointerException异常。

针对异常的处理我们在上一篇有提及:

先来看一下实际项目中一些判空方式

通常我们判断一个对象是否为Null,可以使用java.util中的Objects.nonNull(obj)、hutool中的ObjectUtil或者直接 null != obj

2、List的判空

像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等

3、String的判空

这里还是用瓶子与水的概念,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

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,不为空取其值,需要四行。

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

4.1 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);    }}复制代码

4.2使用场景

场景1:在service层中 查询一个对象,返回之后判断是否为空并做处理

场景2:使用Optional 和函数式编程,一行搞定

5、总结

每种方法的存在必然有适用的场景,有些情况下这种链式编程,虽然代码优雅了。但是,逻辑性没那么明显,可读性有所降低,大家项目中看情况酌情使用。

来源地址:https://blog.csdn.net/ww2651071028/article/details/130335753

--结束END--

本文标题: Java如何优雅的进行判空

本文链接: https://lsjlt.com/news/397316.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java如何优雅的进行判空
    1、前言 实际项目中我们会有很多地方需要判空校验,如果不做判空校验则可能产生NullPointerException异常。 针对异常的处理我们在上一篇有提及: 先来看一下实际项目中一些判空方式 通常我们判断一个对象是否为Null,可以使...
    99+
    2023-09-06
    java jvm servlet
  • Swift如何优雅的进行解包
    目录前言var num: Int?它是什么类型?解包的基本思路解包深入可选链的解包nullable和nonnull一点点Swift与OC的语言思考前言 对于Swift...
    99+
    2024-04-02
  • Java:如何更优雅的处理空值?
    在笔者几年的开发经验中,经常看到项目中存在到处空值判断的情况,这些判断,会让人觉得摸不着头绪,它的出现很有可能和当前的业务逻辑并没有关系。但它会让你很头疼。有时候,更可怕的是系统因为这些空值的情况,会抛出空指针异常,导致业务系统发生问题。此...
    99+
    2023-06-03
  • Java8 Optional优雅空值判断的示例代码
    先介绍一下API,与其他文章不同的是,本文采取类比的方式来讲,同时结合源码。而不像其他文章一样,一个个API罗列出来,让人找不到重点。 1、Optional(T value),emp...
    99+
    2024-04-02
  • 如何优雅的在手机上进行Python编程
    关注「实验楼」,每天分享一个项目教程   大家都知道有安卓上有一个QPython,可以写Python,但是QPython已经好久没有更新了,官方也貌似没有更新的打算了。今天,给大家推荐另一款安卓工具。正文共:1071 字 预计阅读时间:...
    99+
    2023-01-31
    机上 在手 优雅
  • 如何进行C++代码的优雅异常处理?
    如何进行C++代码的优雅异常处理?在编程过程中,异常处理是一个重要的方面。异常处理可以帮助我们在代码执行过程中处理意外情况,保证程序的稳定性和可靠性。在C++中,异常处理的机制能有效地捕获和处理错误,从而帮助我们优雅地处理异常情况。本文将介...
    99+
    2023-11-02
    异常处理 (Exception Handling) C++编程 (C++ programming) 优雅异常 (Grac
  • Spring Cloud Gateway如何优雅地进行feign调用
    之前写过一篇文章,介绍微服务场景下的权限处理,方案如下: 在实践中,上面的网关选型为Spring Cloud Gateway,所以这里就存在一个问题,即网关如何调用用户服务进行鉴权的问题。 在微服务...
    99+
    2023-09-12
    java 微服务 spring cloud gateway
  • Java函数处理大数据:如何优雅地进行重定向?
    在Java编程中,我们经常需要处理大量的数据。而重定向是一个常用的技术,可以将程序的输出和错误信息写入到文件中,方便后续的分析和处理。本文将介绍如何优雅地进行重定向,并提供相关代码演示。 什么是重定向? 在Java中,重定向是指将程序...
    99+
    2023-08-23
    函数 大数据 重定向
  • 基于Modernizr如何让网站进行优雅降级
    基于Modernizr如何让网站进行优雅降级,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  如今一个网页展现的内容是越来越丰富...
    99+
    2024-04-02
  • 如何进行更加优雅地Docker部署项目
    本篇文章给大家分享的是有关如何进行更加优雅地Docker部署项目,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如果你需要经常性需要多处部署同样的项目,如果你曾经也遇到过&quo...
    99+
    2023-06-19
  • 如何在Java项目中优雅地使用NPM和LeetCode进行打包?
    Java是一种广泛使用的编程语言,而NPM和LeetCode则是两个非常强大的工具,用于在Java项目中进行打包和测试。在本文中,我们将讨论如何在Java项目中优雅地使用NPM和LeetCode进行打包。 首先,让我们来了解一下NPM是什么...
    99+
    2023-07-30
    npm leetcode 打包
  • 如何优雅、安全的关闭MySQL进程
    前言 本文分析了 mysqld 进程关闭的过程,以及如何安全、缓和地关闭 MySQL 实例,对这个过程不甚清楚的同学可以参考下。 关闭过程 发起 shutdown,发出 SIGTERM 信号 有必要的话,新建一个关闭...
    99+
    2022-05-12
    MySQL 进程 MySQL 关闭进程
  • go文件框架和shell: 如何优雅地进行整合?
    随着信息技术的不断发展,人们对于软件开发的要求也越来越高。在开发软件的过程中,往往会用到不同的工具和框架。在本文中,我们将会探讨如何在Go文件框架和Shell之间进行优雅的整合,以提高软件开发的效率和质量。 一、Go文件框架的介绍 Go语言...
    99+
    2023-11-10
    文件 框架 shell
  • 【Java】如何优雅的关闭线程池
    文章目录 背景一、线程中断 interrupt二、线程池的关闭 shutdown 方法2.1、第一步:advanceRunState(SHUTDOWN) 把线程池置为 SHUTDOWN2.2、...
    99+
    2023-09-21
    java 开发语言
  • 一文详解Python如何优雅地对数据进行分组
    假设我们有这样一种数据: data = [     ("apple", 30), ("apple", 35),     ("apple", 32), ("pear", 60),   ...
    99+
    2024-04-02
  • C++开发建议:如何进行C++代码优雅的错误处理
    C++开发建议:如何进行C++代码优雅的错误处理引言:在C++开发中,错误处理是一项重要的技术,它涉及如何识别错误、处理异常情况以及保证程序的正常运行。良好的错误处理机制可以提高代码的可维护性和可靠性,而糟糕的错误处理可能导致程序崩溃、资源...
    99+
    2023-11-22
    错误处理 C++编程 优雅处理
  • python中如何优雅的一次性判断多个条件
    这篇文章主要介绍python中如何优雅的一次性判断多个条件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!优雅的一次性判断多个条件假如有三个条件,只要有一个为真就可以通过,也许你会这么写:x, y, ...
    99+
    2023-06-27
  • pandas如何优雅的列转行及行转列详解
    目录一、列转行1、背景描述2.方法描述2.1 方法12.2 方法22.3 方法32.4 方法43 思考与总结4 思维延伸4.1 例子14.2 例子2二、行转列1.准备数据2.行转列实...
    99+
    2024-04-02
  • Java如何实现优雅的参数校验
    这篇文章主要介绍“Java如何实现优雅的参数校验”,在日常操作中,相信很多人在Java如何实现优雅的参数校验问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java如何实现优雅的参数校验”的疑惑有所帮助!接下来...
    99+
    2023-07-02
  • 文件的真实类型如何利用java进行判断
    文件的真实类型如何利用java进行判断?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体代码如下:package com.zhuifeng.util.excel...
    99+
    2023-05-31
    java ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作