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

相关推荐

  • 云南新锐知商杨浩:创业艰难百战多

      “我要是有机会做企业,也不会差”,90年代中后期,乡镇企业家的一句玩笑话,让端了二十几年“铁饭碗”的杨浩萌生了创业的念头,并选择了近年来才兴起的蓝莓种植业,一步一步地走上成功之路。   此前,由汇桔网主办的2017知商服务中国行高峰论坛在云南昆明隆重举行,来自知识产权界、企业界、学术界、媒体界等大咖以及全国的800多名知商欢聚一堂,共襄知商盛事。汇桔网董…

    创业分享 2023-05-21
    203
  • 炒币、割韭菜、裁员…之后,2019创业者怎样突围

    人工智能语音客服。 拼多多获得巨大成功之后,在 2019 年,大量关于社交裂变的尝试会出现。 真用了,妈妈甚至会有罪恶感。我是不是对孩子不好啊。就算没有这种罪恶感,必要性也不是很强。 而对于视频内容生产者来说,没有一定拍摄、剪辑能力,还真做不好一个视频内容。 最后,我们回到流量如水这个逻辑。 那什么符合我说的“用最少的钱,替代最多的人呢”? 一切商业的进步只…

    创业分享 2023-05-13
    192
  • 山东省大众创业万众创新活动周专题论坛在曲阜师范大学举办

    10月12日,曲阜师范大学作为山东省大众创业万众创新活动周承办单位和分场馆之一,在日照校区举办了“创翼无限 领跑未来” 专题论坛活动。曲阜师范大学副校长康淑敏,日照市发展和改革委员会副主任贺淑英,日照市科学技术协会副主席徐若菲,曲阜师范大学招生就业处、团委和创新创业教育学院主要负责同志出席此次论坛。论坛由日照校区机关党委书记、学生工作办公室主任孔令军主持。 …

    创业分享 2023-05-28
    157
  • 巾帼创业 “孝”容最美

      韩霞(右一)在指导行动不便的老人锻炼身体。韩霞2017年帮扶结对困难户、留守儿童、特困家庭等10余次,先后捐赠衣物、生活用品、书包等约2.8万元。   韩霞(中)利用空闲时间和喜欢打牌的老人一起打纸牌。她经常免费为五保老人及社区老人提供理发、助浴、助洁、助乐、助娱及送衣服、被褥、生活用品等服务,受助老人达2000人左右。   在山东滨州邹平,“韩霞家政”…

    创业分享 2023-05-12
    173
  • [股市直播]创业板指或是弱势反抽 上方均线压力仍然较大

      截至收盘,沪指报3275.96点,涨2.13点,涨幅0.07%,成交2233亿元。深成指报10654.09点,涨66.78点,涨幅0.63%,成交2698亿元。创业板报1910.48点,涨12.97点,涨幅0.68%,成交590亿元。   【最新相关报道】   盘面上,环保股领涨两市,港口航运,农业服务,地产,煤炭,建筑材料等板块涨幅居前,雄安新区,京津…

    创业分享 2023-05-24
    123

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

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