Java教程之教你更优雅的写法处理null检查

回顾以前对null的处理方式public class OptionalTest { public static void main(String[] args) { test01(“小黑”); test01(null); } public static void test01(String userName) { if (userName != null) { System.out.println(“用户名为: “ + userName); } else { System.out.println(“用户名为null”); } } }Optional类介绍

Optional是JDK1.8推出的一个新的类,是一个没有子类的工具类,Optional可以理解为一个容器,其内部仅能存放一个对象元素或者存放null。它的作用主要就是为了解决避免Null检查,防止NullPointerException。

Java教程之教你更优雅的写法处理null检查
Optional的基本使用

Optional类的创建方式:

方法

说明

Optional.of(T t)

创建一个 Optional 实例,内部保存t对象,如果t为null会出现空指针异常

Optional.empty()

创建一个空的 Optional 实例,内部保存null

Optional.ofNullable(T t)

若 t 不为 null,创建 Optional 实例,否则创建空实例

代码演示:

public static void test02() { Optional<String> o1 = Optional.of(“小马”); // Optional<String> o2 = Optional.of(null); // 如果t为null会出现空指针异常 Optional<String> o3 = Optional.empty(); Optional<String> o4 = Optional.ofNullable(null); System.out.println(“o1 = “ + o1); // System.out.println(“o2 = ” + o2); System.out.println(“o3 = “ + o3); System.out.println(“o4 = “ + o4); }

运行效果:

o1 = Optional[小马] o3 = Optional.empty o4 = Optional.empty

Optional类的常用方法:

方法

说明

isPresent()

判断是否包含值,包含值返回true,不包含值返回false

get()

如果Optional有值则将其返回,否则抛出NoSuchElementException

orElse(T t)

如果调用对象包含值,返回该值,否则返回参数t

orElseGet(Supplier s)

如果调用对象包含值,返回该值,否则返回 s 获取的值

代码演示:

public static void test03() { Optional<String> o5 = Optional.of(“小马”); Optional<String> o6 = Optional.empty(); Optional<String> o7 = Optional.ofNullable(null); // isPresent() : 判断是否包含值,包含值返回true,不包含值返回false。 if (o5.isPresent()) { // get() : 如果Optional有值则将其返回,否则抛出NoSuchElementException。 String userName = o5.get(); System.out.println(“用户名o5为:” + userName); } else { System.out.println(“用户名o5为null”); } if (o6.isPresent()) { String userName = o6.get(); System.out.println(“用户名o6为:” + userName); } else { System.out.println(“用户名o6为null”); } if (o7.isPresent()) { String userName = o7.get(); System.out.println(“用户名o7为:” + userName); } else { System.out.println(“用户名o7为null”); } }

运行效果:

用户名o5为:小马 用户名o6为null 用户名o7为nullOptional的高级使用

代码演示:

public static void test04() { Optional<String> o8 = Optional.of(“小程”); Optional<String> o9 = Optional.empty(); // 存在做的什么 o8.ifPresent(s -> System.out.println(“用户名o8为” + s)); o9.ifPresent(s -> System.out.println(“用户名o9为” + s)); } public static void test05() { Optional<String> o10 = Optional.of(“小序”); Optional<String> o11 = Optional.empty(); // 如果调用对象包含值,返回该值,否则返回参数 System.out.println(“用户名o10为: “ + o10.orElse(“不存在数据10”)); System.out.println(“用户名o11为: “ + o11.orElse(“不存在数据11”)); // 如果调用对象包含值,返回该值,否则返回参数Supplier得到的值 String s10 = o10.orElseGet(() -> {return “未知用户名10”;}); System.out.println(“s10 = “ + s10); String s11 = o11.orElseGet(() -> {return “未知用户名11”;}); System.out.println(“s11 = “ + s11); }

运行效果:

用户名o8为小程 用户名o10为: 小序 用户名o11为: 不存在数据11 s10 = 小序 s11 = 未知用户名总结

Optional可以理解为一个容器,其内部仅能存放一个对象元素或者存放null。它的作用主要就是为了解决避免Null检查,防止NullPointerException。OptionalorElseifPresentorElseGet等方法避免对null的判断,写出更加优雅简洁的代码。

免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:Java教程之教你更优雅的写法处理null检查 https://www.dachanpin.com/a/cyfx/11894.html

(0)
自己动手编写清理工具:清理MarkDown文档中多余的图片
上一篇 2023-05-12 03:54:09
Java教程之基于XXL-JOB实现分布式任务调度的实现
下一篇 2023-05-12 03:55:11

相关推荐

  • 2019创业怎么选?喜呵呵喜糖盒代理成为首选

    智联招聘发布《2018年秋季中国雇主需求与白领人才供给报告》显示,2018年秋季,全国37个主要城市的平均招聘月薪为7850元,环比上升0.2%,同比涨幅为3.3%。其中,北京平均最高,为10670元。上海平均薪酬突破万元,杭州和广州平均薪酬分别为8798元、8281元。不少人还嚷着拉低了平均值。 “喜糖包装一般不被人注意,但只要踏实干,就会发现,这个行业的…

    2023-05-13
  • 免费入场!海南创业导师商学院大讲堂第一期8月2日开讲

      南海网、南海网客户端海口7月31日消息(南海网记者 孙令正)由海南人力资源开发局主办、南海网承办的海南创业导师商学院大讲堂第一期,将于8月2日(周四)上午在海口市复兴城互联网创新创业园开讲。中国社会科学院投融资研究中心副主任、中国社会科学院金融研究所副研究员陈经伟现场授课,其内容为“海南自由贸易试验区与中国特色自由贸易港政策解读与应对之策”,以金融视角剖…

    创业分享 2023-05-16
  • 创新创业著华章 西藏首届高校学生创新创业经验交流会侧记

    在本次交流座谈会上,自治区教育厅副厅长达娃总结说:“目前,我区大学生创业还处于起步阶段,相关的政策正处于运筹落实阶段。要引领大学生投入到创新创业实践当中去,需健全工作机制,切实做到‘机构、人员、场地、经费’四到位,进一步为学生的创新创业打基础、服好务。” 2015年12月,全区首个大学生创业孵化基地在西藏民族大学成立,填补了我区没有创业孵化基地的空白,标志着…

    创业分享 2023-05-24
  • 【回源溯初】卡贝成长路:创业艰苦,唯有坚持

     高总:未来,希望有更多的伙伴可以实现自我价值,过去的经验都是过去,我们要着眼于未来,前面成功的经验放在未来不一定能用,我们要吸收新人、吸收新思想,不断提升卡贝的实力,为更多年轻人提供资源和机会,也希望更多的人成为合作伙伴,希望更多的员工未来越来越好。   卡贝十年走来,经历了很多风雨,能一路走来,我觉得靠的是信赖感。像我们企业愿景“成为…

    创业分享 2023-06-02
  • 2月编程语言排行榜出炉!有哪些新变化?

    近日,TIOBE公布了2023年2月编程语言排行榜,本月各个语言表现如何?谁又摘得桂冠?跟黑马君一起来看看吧! TIOBE 2月Top15编程语言: 详细榜单查看TIOBE官网 https://www.tiobe.com/tiobe-index/ 关注IT行业的小伙伴们都知道,编程语言“你追我赶”的竞争已持续良久。 从整体来看,本月各大编程语言的排名变化不大…

    2023-05-12

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

工作时间:周一至周五,9:30-16:30,节假日休息