【Java8新特性】Optional类在处理空值判断场景的应用回避空指针异常编写健壮的应用程序

博客 动态
0 192
优雅殿下
优雅殿下 2022-02-24 10:55:43
悬赏:0 积分 收藏

【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的优点展现出来。从场景入手学技术比单调的技术讲解更有趣味。

喜欢本文就【??推荐??】一下,激励我持续创作。这个Github同样精彩,收到您的star我会很激动。本文归档在专题博客,视频讲解在B站。

posted @ 2022-02-24 10:52 Java知识图谱 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员