首页 > 其他分享 >优雅地判空(NullPointerException)

优雅地判空(NullPointerException)

时间:2023-08-26 21:32:29浏览次数:37  
标签:obj 地判空 对象 优雅 使用 null Optional NullPointerException 指针

空指针出现场景:

A.对象引用为null:当一个对象引用为null时,试图使用该对象的成员(如方法或字段)就会导致空指针异常。

B.对象属性为null:当一个类的属性没有被初始化或者赋值为null,在访问该属性时也会导致空指针异常。

C.数组为null:当一个数组引用为null时,试图访问数组的元素也会导致空指针异常。

解决思路:

1.在日常开发中空指针时长会遇到普通判空写法

if (obj != null) {

    // 执行操作

}

这是最简单的判空方法,通过检查对象是否为空来避免空指针异常。但是,对于多个对象的判空,使用大量的条件判断会使代码冗长且难以维护。

2.多个条件放一起进行判空使用短路运算符

if (obj != null && obj.getString() != null) {
    // 执行操作
}

使用逻辑与运算符(&&),可以将多个判空条件连接在一起。如果前一个条件不成立(即obj为null),则后续的条件不会被执行,从而避免出现空指针异常。

使用Java8的新特性工具类

3.Optional解决空指针异常(NullPointerException)的问题,并提供了一种优雅的方式来处理可能为空的对象。Optional类是一个容器类,它可以保存一个值,这个值可以是null,也可以是非null。

使用Optional类的主要目的是让代码更加健壮和可读,并鼓励开发者明确处理可能为空的情况,而不是简单地依赖于条件判断。以下是一些使用Optional类的常见操作:

  1. 创建Optional对象:
  • 使用Optional.of(value):使用非null的值创建Optional对象。如果传入的值为null,则会直接抛出NullPointerException。
  • 使用Optional.ofNullable(value):创建一个Optional对象,允许传入null值。
  1. 判断Optional对象是否包含值:
  • 使用isPresent()方法:如果Optional对象包含非null的值,则返回true,否则返回false。
  1. 获取Optional对象的值:
  • 使用get()方法:如果Optional对象中存在非null值,返回该值,否则抛出NoSuchElementException异常。
  • 使用orElse(defaultValue)方法:如果Optional对象中存在非null值,返回该值,否则返回defaultValue。
  1. 处理Optional对象的值:
  • 使用ifPresent(Consumer<T> consumer)方法:如果Optional对象中存在非null值,执行传入的消费函数consumer,可以在函数中对值进行相应的处理。
  • 使用orElseThrow(Supplier<X> exceptionSupplier)方法:如果Optional对象为空,抛出由提供的异常供应函数创建的异常。

Optional<Object> optionalObj = Optional.ofNullable(obj);
if (optionalObj.isPresent()) {
    Object value = optionalObj.get();
    // 执行操作
}

4.使用三目运算符:

Object result = (obj != null) ? obj.getString() : null;

5.在设计和编写代码时,合理地初始化和赋值对象,尽量避免产生null引用。

public class MyClass {
    private String name = "";
    // ...
}

优雅地判空(NullPointerException)_空指针异常

标签:obj,地判空,对象,优雅,使用,null,Optional,NullPointerException,指针
From: https://blog.51cto.com/u_16226278/7246174

相关文章

  • markdown文章优雅迁移到微信公众号
    最佳实践复制下面的在线markdown右上角点击复制到微信公众号即可参考https://cloud.tencent.com/developer/article/1034690https://markdown.com.cn/editor/......
  • 安全启动、优雅退出
    在服务开发的时候,可能会遇到服务频繁启动或者频繁销毁的情况,需要分配和回收服务的资源;同时如果在服务关闭处理的不优雅的情况,还可能会丢失数据,因此服务设计的时候,需要考虑如何优雅的对服务进行启停。 packagemainimport("fmt""os""os/signal""sync"......
  • 如何优雅的使用telnet测试端口连通性
    telnet命令是TELNET协议的用户接口,它支持两种模式:命令模式和会话模式,虽然telnet支持许多命令,但大部分情况下,我们只是使用它查看目标主机是否打开了某端口(默认是23)。其执行结果有两种:端口未打开$telnet101.199.97.6562715Trying101.199.97.65...telnet:connecttoaddres......
  • 珂朵莉树——优雅的暴力
    珂朵莉树引入珂朵莉树(ChthollyTree),又名老司机树(OldDriverTree)。起源于CF896C。这种想法的本质是基于数据随机的「颜色段均摊」,而不是一种数据结构。前置需要了解STL的set的基本用法。比如:insert(x) 当容器中没有等价元素的时候,将元素x插入到 set 中。er......
  • MyBatis-Flex:超越Mybatis-plus的优雅魅力
    MyBatis-Flex一个优雅的MyBatis增强框架。更轻量MyBatis-Flex除了MyBatis本身,再无任何第三方依赖,因此会带来更高的自主性、把控性和稳定性。在任何一个系统中,依赖越多,稳定性越差。更灵活MyBatis-Flex提供了非常灵活的QueryWrapper,支持关联查询、多表查询、多主键、逻辑删除......
  • SpringMVC-1-解密Spring MVC:构建优雅、灵活的Web应用的秘诀
    今日目标能够编写SpringMVC入门案例了解SpringMVC原理1.SpringMVC介绍1.1SpringMVC概述思考:SpringMVC框架有什么优点?SpringMVC是一种基于Java实现MVC模型的轻量级Web框架优点使用简单,开发便捷(相比于Servlet)天然的与Spring框架集成(如IOC容器、AOP等)请求处理简化:支......
  • 再见MyBatis-Plus,推荐一个优雅的 MyBatis 增强框架
    Mybatis是一个优秀的ORM框架,本身功能比较少,为了提高开发效率,出现了一些Mybatis增强框架,大家比较熟悉的是MyBatis-Plus。今天给大家推荐一个轻量的Mybatis增强框架--MyBatis-Flex。项目特征轻量,框架只依赖Mybatis再无其他第三方依赖只增强,支持Entity的增删改查及分页......
  • 如何优雅的对input框数据进行动态脱敏
    说在前面......
  • “优雅”的js
    ......
  • Python 优雅的使用 paramiko 进行交互式输入输出
    目的:需要ssh链接到Linux主机,执行telnet命令,抓回显匹配制定内容。ssh.exec_command(cmd,bufsize,timeout)#exec_command参数使用只需要执行一次的命令,因为执行完该命令以后,shell会自动回到ssh初始连接的shell状态下ssh.invoke_shell()#在SSHserver端创建一个交互式的shell,且......