Java8新特性Optional类处理空值判断回避空指针异常应用

 更新时间:2022年04月02日 17:43:37   作者:Java知识图谱  
这篇文章主要介绍了Java8新特性Optional类处理空值判断回避空指针异常应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

一、序言

空值异常是应用运行时常见的异常,传统方式为了编写健壮的应用,常常使用多层嵌套逻辑判断回避空指针异常。Java8新特性之Optional为此类问题提供了优雅的解决方式。

广大程序员朋友对空值异常刻骨铭心,因此Optional一经推出,广受赞誉。

二、问题复原

(一)素材准备

public class LoginUser implements UserDetails {
    private Long deptId;
    private String token;
    private Long loginTime;
    private Long expireTime;
    private String ipaddr;
    private String loginLocation;
    private String browser;
    private String os;
    private SysUser user;
}
public class SysUser {
    private Long userId;
    private Long deptId;
    private String userName;
}

相关SetterGetter方法自行添加。

(二)模拟演示

1、传统方式

/**
 * 普通嵌套判断方式判断空值
 *
 * @param loginUser 登录用户体
 * @return 用户ID
 */
public Long getUserId(LoginUser loginUser){
    if (loginUser!=null) {
        SysUser user = loginUser.getUser();
        if (user!=null) {
            return user.getUserId();
        }
    }
    return null;
}

方法参数传递的变量loginUser使用前不确定是否为空,因此需要逻辑判断;user变量使用前不确定是否为空,因此需要逻辑判断。两层逻辑判断之后,方能安心调用获取UserId方法。

显而易见,当对象嵌套层次较深时,需要做的逻辑判断越多,代码越复杂。

2、优雅方式

/**
 * 通过Optinal处理空值判断
 *
 * @param loginUser 登录用户体
 * @return 用户ID
 */
public Long getUserId(LoginUser loginUser) {
    return Optional.ofNullable(loginUser)
        .map(LoginUser::getUser).map(SysUser::getUserId).orElse(null);
}

在满足同样需求的前提下,使用Optional类代码量更少,业务逻辑更清晰。

Optional使用方法引用的语法,属于Lambda表达式的一种。

三、小结

本文介绍了Optional类在处理空值判断场景的应用,通过对比的方式,将Optional的优点展现出来。从场景入手学技术比单调的技术讲解更有趣味。

以上就是Java8新特性Optional类处理空值判断回避空指针异常应用的详细内容,更多关于Optional类空值判断回避空指针异常处理的资料请关注脚本之家其它相关文章!

相关文章

  • java中gc算法实例用法

    java中gc算法实例用法

    在本篇文章里小编给大家整理了一篇关于java中gc算法实例用法,有兴趣的朋友们可以参考学习下。
    2021-01-01
  • Json字符串与Object、List、Map的互转工具类

    Json字符串与Object、List、Map的互转工具类

    今天小编就为大家分享一篇关于Json字符串与Object、List、Map的互转工具类,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Java聊天室之使用Socket实现传递图片

    Java聊天室之使用Socket实现传递图片

    这篇文章主要为大家详细介绍了Java简易聊天室之使用Socket实现传递图片功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以了解一下
    2022-10-10
  • Java编程用栈来求解汉诺塔问题的代码实例(非递归)

    Java编程用栈来求解汉诺塔问题的代码实例(非递归)

    这篇文章主要介绍了Java编程用栈来求解汉诺塔问题的代码实例(非递归),具有一定参考价值,这里给大家分享下,供朋友们参考。
    2017-10-10
  • SpringBoot自定义start详细图文教程

    SpringBoot自定义start详细图文教程

    这篇文章主要给大家介绍了关于SpringBoot自定义start的相关资料,主要讲述如何自定义start,实现一些自定义类的自动装配,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Java中LinkedHashSet的实现原理详解

    Java中LinkedHashSet的实现原理详解

    这篇文章主要介绍了Java中LinkedHasSet的实现原理详解,LinkedHashSet 是具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现,此实现与HashSet 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表,需要的朋友可以参考下
    2023-09-09
  • Java中对于双属性枚举的使用案例

    Java中对于双属性枚举的使用案例

    今天小编就为大家分享一篇关于Java中对于双属性枚举的使用案例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Java中数组如何转为字符串的几种方法

    Java中数组如何转为字符串的几种方法

    数组是java中一个重要的类型,小伙伴们知道如何将数组转为字符串吗,这篇文章主要给大家介绍了关于Java中数组如何转为字符串的几种方法,需要的朋友可以参考下
    2024-03-03
  • 通过实例了解java checked和unchecked异常

    通过实例了解java checked和unchecked异常

    这篇文章主要介绍了通过实例了解checked和unchecked异常,Java异常分为两种类型,checked异常和unchecked异常,另一种叫法是异常和错误。下面小编就带大家来一起学习一下吧
    2019-06-06
  • Java实现的JSONUtil工具类与用法示例

    Java实现的JSONUtil工具类与用法示例

    这篇文章主要介绍了Java实现的JSONUtil工具类与用法,结合实例形式分析了Java操作json格式数据工具类JSONUtil的定义与简单使用技巧,需要的朋友可以参考下
    2018-07-07

最新评论