Java8新特性 Optional类

今天药忘吃喽~ 2022-11-08 05:58 401阅读 0赞

Optional类

文章目录

  • Optional类
    • 一、简介
        1. 介绍
        1. 常用方法
        1. 测试数据
    • 二、使用
        1. 创建Optional类对象
        1. 获取Optional容器的数据
        1. 避免空指针异常的使用

一、简介

1. 介绍

  • Optional类是为了在程序中避免出现空指针异常而设计的
  • Optional类(java.util.Optional)是一个容器类,它可以保存一个类型为T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用null表示一个值不存在,现在Optional可以更好的表达这个概念
  • Optional类的 Javadoc 描述如下:这是一个可以为null的容器对象。如果这个值存在则 isPresent() 方法会返回true,调用 get() 方法会返回此值

2. 常用方法

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80OTM0MzE5MA_size_16_color_FFFFFF_t_70

3. 测试数据

  1. public class Girl {
  2. private String name;
  3. //以及其余JavaBean结构
  4. }
  5. public class Boy {
  6. private Girl girl;
  7. //以及其余JavaBean结构
  8. }

二、使用

1. 创建Optional类对象

  1. @Test
  2. public void test1(){
  3. Girl girl = new Girl();
  4. //1. Optional.of(T t) : 创建一个Optional实例,t必须非空
  5. Optional<Girl> optionalGirl = Optional.of(girl);
  6. System.out.println(optionalGirl); //Optional[Girl{name='null'}]
  7. //若t为空,报空指针异常
  8. }
  9. @Test
  10. public void test2() {
  11. Girl girl = null;
  12. //2. Optional.ofNullable(T t) : 创建一个Optional实例,t可以为null
  13. Optional<Girl> optionalGirl = Optional.ofNullable(girl);
  14. System.out.println(optionalGirl); //Optional.empty
  15. }
  16. @Test
  17. public void test3() {
  18. //3. Optional.empty() : 创建一个空的Optional实例
  19. Optional<Object> empty = Optional.empty();
  20. System.out.println(empty); //Optional.empty
  21. }

2. 获取Optional容器的数据

  1. @Test
  2. public void test() {
  3. Girl girl = null;
  4. Optional<Girl> optionalGirl = Optional.ofNullable(girl);
  5. System.out.println(optionalGirl); //Optional.empty
  6. //orElse(T t1) : 如果当前的Optional内部封装的数据是非空的,返回此数据;如果封装的数据是空的(null),则返回参数指定的数据
  7. Girl girl1 = optionalGirl.orElse(new Girl("花泽香菜"));
  8. System.out.println(girl1); //Girl{name='花泽香菜'}
  9. //一定可以保证girl1是非空的,如果Optional内部封装的数据为空则返回赵丽颖,避免了空指针异常
  10. }

3. 避免空指针异常的使用

  1. public class OptionalTest {
  2. //定义一个方法,防止出现空指针异常
  3. public String getGirlName(Boy boy){
  4. //参数boy可能是空的
  5. Optional<Boy> boyOptional = Optional.ofNullable(boy);
  6. //此时的boy1一定非空
  7. Boy boy1 = boyOptional.orElse(new Boy(new Girl("迪丽热巴")));
  8. //当boy没有给girl属性赋值时,获取到的girl可能为空
  9. Girl girl = boy1.getGirl();
  10. Optional<Girl> girlOptional = Optional.ofNullable(girl);
  11. //girl1一定非空
  12. Girl girl1 = girlOptional.orElse(new Girl("古力娜扎"));
  13. return girl1.getName();
  14. }
  15. @Test
  16. public void test1(){
  17. Boy boy = null;
  18. String girlName = getGirlName(boy);
  19. System.out.println(girlName); //迪丽热巴
  20. }
  21. @Test
  22. public void test2() {
  23. Boy boy = new Boy();
  24. String girlName = getGirlName(boy);
  25. System.out.println(girlName); //古力娜扎
  26. }
  27. @Test
  28. public void test3() {
  29. Boy boy = new Boy(new Girl("王祖贤"));
  30. String girlName = getGirlName(boy);
  31. System.out.println(girlName); //王祖贤
  32. }
  33. }

发表评论

表情:
评论列表 (有 0 条评论,401人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JDK8特性Optional

    1、前言 作为一名Java程序员,无论是初入茅庐的菜鸟,还是久经江湖的高手,曾经肯定遭遇过各种各样的异常错误。在国外的一篇文章中,就统计了关于异常类型的排行榜,如下图: