Optional类避免空指针问题

2023-11-04

原始判空方式:

 if(user != null){
	System.out.println(user)
 }

JDK8封装了Optional类解决空指针问题

  • 创建Optional实例
User u = new User();
Optional<User> opUser = Optional.of(u); //of方法不能传入null,会抛出空指针异常
Optional<User> opUser = Optional.ofNullable(u); // ofNullable允许传入null值
  • 获取Optional对象维护的数据
    get() : 直接返回维护的数据,如果为null,则会抛出异常
    orElse() : 需要传入一个默认数据,如果数据为null,则返回传入的默认值.
    orElseGet() : 该方法需要传入一个供给型接口,可在进行一系列操作之后返回想要的默认值.
    orELseThrow():如果为null,则会抛出异常,也是需要传入一个供给型接口.
User u = new User();
Optional<User> opUser = Optional.ofNullable(u); // ofNullable允许传入null值
opUser.get(); //拿到数据,但是如果为null,则会抛出异常
opUser.orElse(new User());
opUser.orElseGet(()->{
	User u = new User();
	u.setName("张三");
	return u;
}); //orElseGet参数需要传一个供给型接口
opUser.orElseThrow(()->{
	return new Exception("参数user不能为空!")
});//如果数据为null则抛出异常,否则返回数据

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Optional类避免空指针问题 的相关文章

随机推荐

  • 子线程中的异常捕获

    根据 线程的本质 当一个线程抛出异常时 在主线程中加try catch 是无法捕获到其抛出的异常的 如下面代码所示 private static final String TAG MainActivity Override protecte
  • 三星手机点击事件不执行或偶尔执行

    这个问题还真是也头疼呢 ScrollView嵌套RecycleView 没有滑动事件 最多显示四个item 然后三星S6手机点击事件有问题 最后发现是监听ScrollView滑到底部的时候拦截了点击事件 在某些手机上出现了不兼容的情况 感谢
  • Java中两个string字符串判断是否相同

    1 使用equals 方法 建议使用这个 使用equals 方法比较两个字符串的内容是否相同 这是最常用的字符串比较方法 它比较字符串的内容是否一致 而不仅仅是比较引用 String str1 Hello String str2 Hello
  • tomcat处理高并发的一些探索

    一 tomcat的三个重要配置 1 maxConnections 最大连接数 解释 在同一时间下 tomcat能够接收的最大连接数 默认值 java的阻塞式BIO 默认值是maxthreads的值 在BIO使用定制的Executor执行器
  • 百度版ChatGPT:文心一言发布会盛大召开!

    今天下午2点 万众期待的百度版ChatGPT 文心一言发布会召开了 图一 投资者对这个发布会的反应非常直接 股价当场断崖式下跌 图二 和ChatGPT发布会上现场功能演示不同 百度发布会的所有功能演示都是提前录制好的 而且也不对大众开放 只
  • Mysql的if case 使用

    Mysql的if既可以作为表达式用 也可在存储过程中作为流程控制语句使用 如下是做为表达式使用 IF表达式 IF expr1 expr2 expr3 如果 expr1 是TRUE expr1 lt gt 0 and expr1 lt gt
  • 基于python的接口自动化测试,最简单实用的教学!

    一 简介 本文从一个简单的登录接口测试入手 一步步调整优化接口调用姿势 然后简单讨论了一下接口测试框架的要点 最后介绍了一下我们目前正在使用的接口测试框架 pithy 期望读者可以通过本文对接口自动化测试有一个大致的了解 二 引言 为什么要
  • 图解通信原理与案例分析-14:“大哥大”与1G模拟蜂窝移动通信案例--频率调制与频分多址FDMA

    前言 在前面的案例中 拆解的是在单个无线信道上 通过模拟幅度调制或模拟频率调制 实现一对一 点对点语音通信 本文将进一步拆解 通过模拟频率调制与频分多址技术 把一定带宽频谱资源切分成多个无线通道上 实现多用户同时语音通信 从单用户通信单元过
  • 程序员面试题精选100题(40)-扑克牌的顺子

    程序员面试题精选100题 40 扑克牌的顺子 题目 从扑克牌中随机抽5张牌 判断是不是一个顺子 即这5张牌是不是连续的 2 10为数字本身 A为1 J为11 Q为12 K为13 而大小王可以看成任意数字 分析 这题目很有意思 是一个典型的寓
  • SpringBoot 集成 达梦数据库 maven依赖本地jar包

    最近做ZF项目 需要使用国产数据库 考虑到人气较高的达梦数据库 这里是版本7 达梦数据库是参考Oracle 和MySQL有一点点的区别 这里介绍下spring boot cloud项目里如何集成达梦数据库 1 下载Dm7JdbcDriver
  • hivesql实现不同的求和需求【分组求和、帕累托累计求和、滑动求和】

    hivesql求和 分组求和 帕累托累计求和 滑动求和 实现功能如下示例 列s1 分组求和 这里以sku id分组求和 E5单元格对应sku id a01时的C列求和 列s2 帕累托求和 随着订单序号增大 同一sku数量累计求和 F5为F2
  • JAVA 如何读取properties文件

    properties文件 属性文件 以 properties结尾的文件 里面的存储的数据是key value形式 中间可以用 将key和value隔开 如果一行中有多个等号 冒号 空格存在 则以最前面的座位分隔符 在实际开发中将频繁变动的数
  • Vue2工程中使用SCSS定义工具样式

    Sass世界上最成熟 稳定和强大的CSS扩展语言 Sass中文网Sass Scss 是世界上最成熟 稳定和强大的专业级CSS扩展语言 Sass Scss 中文网主要致力于Sass Scss 在中国的推广 通过Sass Scss 来改变前端工
  • 详解Liunx中less命令:查看日志,搜索关键字

    在less查看命令中最常用的功能是查看日志 可以直接用less xxx log查看日志 打开方式 less 100g xxx log 打开日志定位到100行的位置 less 100P xxx log 打开日志定位到100个字节的位置 les
  • C++ 实现 链表合并(数据结构)

    代码实现 include
  • 《Being Logical:A Guide to Good Thinking》

    Author D Q McInerny Just to start a fantastic logic trip 1 全神贯注 不要掉入相似性的陷阱 To be continued
  • mac升级pip报错There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION]

    起因 安装fasttext sudo pip install fasttext 报错 There was a problem confirming the ssl certificate SSL TLSV1 ALERT PROTOCOL V
  • getStorageSync获取到的是undefined 微信小程序

    问题描述 需求 从缓存中读取session id 并装入cookie传给后台 问题 后台收到的值为undefined 代码部分 修改前 使用wx getStorage获取数据 然后存到当前页面的data中 再用wx request将data
  • kotlin 中 @JvmStatic 注解的作用。

    关于 kotlin 中的 JvmStatic 注解 JvmPlatformAnnotations kt 的注释原文 Specifies that an additional static method needs to be generat
  • Optional类避免空指针问题

    原始判空方式 if user null System out println user JDK8封装了Optional类解决空指针问题 创建Optional实例 User u new User Optional