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。Optional的orElse,ifPresent,orElseGet等方法避免对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

相关推荐

  • 如何发现身边的商机 找到下一个创业的风口?

      ②体积太大、便携性差   今天,安东胜给大家分享如何按照消费层次找商机的方法。我们可以把消费者按照消费能力分为三个层次,底层消费者、 中产阶级,精英阶层。针对不同阶层的消费者,洞察他们的潜在需求,生产满足他们需求的产品。   相比于普通消费者,“底层消费者”更加在乎低价、便捷和易用,他们能忍受产品质量低下,因为“有产品可用”总比“没产品可用”要强。   …

    创业分享 2023-05-21
  • 创新创业团队来珠海“抢”1亿元资助

    创新创业团队来珠海“抢”1亿元资助 珠海出台最强人才新政“珠海英才计划”加快集聚新时代创新创业人才,全国首创给人才赠送住房50%产权 来源:南方都市报     2018年04月25日        版次:ZB01    作者:朱鹏景 李京 …

    2023-05-18
  • 新华访谈:创客问部委:创业遇到这些问题该怎么办?

        你和这些风投企业去建立联系,让他们去评估。如果值得投,他们肯定会给资金。现在400亿的国家新兴产业创投引导基金正在做进一步修改完善,很快再上报国务院审批,今年年底前国家层面的母基金就会成立。     教育部相关负责人:过去创业是少数人的专利,现在“大众创业、万众创新”让创…

    创业分享 2023-05-24
  • 创业20年他说创业者都是粪桶 烧钱砸出的独角兽总是要还的

    他是二十年创业老炮,他对创业者说觉得难就不要创业,还说每个创业者都是粪桶,自己做了二十年粪桶。 对某些被资本砸出的金光灿灿独角兽,他直言不看好,出来混江湖总是要还的。 他是云学堂创始人卢睿泽。 第一次创业时,刚毕业的卢睿泽想的是自己当家做主挣大钱,这一次,他希望能做一件有价值、有影响力的大事。 从传统的软件转型到互联网,以往的积淀几乎被完全抛下,商业模式和盈…

    创业分享 2023-05-22
  • 怎么画产品架构图?

    架构图的作用 架构图一般是在产品规划初期出现的,用于呈现产品的大致规划。因为这个时候产品还未成形,还需要通过一次次的讨论才能确定细节。但是讨论的时候总得有一个具体落地的文档作为参考,不然就是天马行空,讨论没有方向。 怎么画产品架构图 产品架构图里包含两大元素:产品端、每个端的功能。 第一步,根据产品战略定位,确定产品的用户角色和需求,从而确定产品有哪几个端。…

    2023-05-12

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

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