Optional

获取对象

  • Optional概述
    可能包含或不包含非null值的容器对象
  • 方法介绍
    | 方法名 | 说明 | | —- | —- | | static Optional of(T value) | 获取一个Optional对象,封装的是非null值的对象 | | static Optional ofNullable(T value) | 获取一个Optional对象,Optional封装的值对象可以是null也可以不是null |

  • 示例代码

    1. public class OptionalDemo1 {
    2. public static void main(String[] args) {
    3. //method1();
    4. //public static <T> Optional<T> ofNullable(T value)
    5. //获取一个Optional对象,Optional封装的值对象可以是null也可以不是null
    6. //Student s = new Student("zhangsan",23);
    7. Student s = null;
    8. //ofNullable方法,封装的对象可以是null,也可以不是null。
    9. Optional<Student> optional = Optional.ofNullable(s);
    10. System.out.println(optional);
    11. }
    12. private static void method1() {
    13. //static <T> Optional<T> of(T value) 获取一个Optional对象,封装的是非null值的对象
    14. //Student s = new Student("zhangsan",23);
    15. Student s = null;
    16. //Optional可以看做是一个容器,里面装了一个引用数据类型的对象。
    17. //返回值就是Optional的对象
    18. //如果使用of方法,封装的对象如果为空,那么还是会抛出空指针异常
    19. Optional<Student> optional1 = Optional.of(s);
    20. System.out.println(optional1);
    21. }
    22. }

常用方法

  • 方法介绍
    | 方法名 | 说明 | | —- | —- | | T get() | 如果存在值,返回值,否则抛出NoSuchElementException | | boolean isPresent() | 如果存在值,则返回true,否则为false |

  • 示例代码

    public class OptionalDemo2 {
     public static void main(String[] args) {
         //get() 如果存在值,返回值,否则抛出NoSuchElementException
         //public boolean isPresent()    判断Optional所封装的对象是否不为空,如果不为空返回true , 否则返回false
    
         //Student s = new Student("zhangsan",23);
         Student s = null;
         Optional<Student> optional = Optional.ofNullable(s);
         //如果封装的是一个null,那么通过get方法再次获取会抛出NoSuchElementException。
         if(optional.isPresent()){
             Student student = optional.get();
             System.out.println(student);
         }else{
             System.out.println("Optional封装的对象为空");
         }
     }
    }
    

处理空指针的方法

  • 方法介绍
    | 方法名 | 说明 | | —- | —- | | T orElse(T other) | 如果不为空,则返回具体的值,否则返回参数中的值 | | T orElseGet(Supplier<? extends T> supplier) | 如果不为空,则返回具体的值,否则返回由括号中函数产生的结果 | | void ifPresent (Consumer<? super T> action) | 如果不为空,则使用该值执行给定的操作,否则不执行任何操作 | | void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) | 如果不为空,则使用该值执行给定的操作,否则执行给定的基于空的操作 |

  • 示例代码

    public class OptionalDemo3 {
     public static void main(String[] args) {
         //method1();
    
         //method2();
         //method3();
         //method4();
    
     }
    
     private static void method4() {
         //Student s = new Student("zhangsan",23);
         Student s = null;
         Optional<Student> optional = Optional.ofNullable(s);
         //public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)、
         //如果不为空,则使用该值执行给定的操作,否则执行给定的基于空的操作。
         optional.ifPresentOrElse(student -> System.out.println(student),
                 ()->System.out.println("为空了"));
     }
    
     private static void method3() {
         //Student s = new Student("zhangsan",23);
         Student s = null;
         Optional<Student> optional = Optional.ofNullable(s);
         //ifPresent (Consumer<? super T> action)
         //如果不为空,则使用该值执行给定的操作,否则不执行任何操作
         optional.ifPresent(student -> System.out.println(student));
     }
    
     private static void method2() {
         Student s = new Student("zhangsan",23);
         //Student s = null;
         Optional<Student> optional = Optional.ofNullable(s);
         //orElseGet(Supplier<? extends T> supplier)
         //如果不为空,则返回具体的值,否则返回由括号中函数产生的结果
    
         Student student = optional.orElseGet(()-> new Student("lisi" , 24));
         System.out.println(student);
     }
    
     private static void method1() {
         //Student s = new Student("zhangsan",23);
         Student s = null;
         Optional<Student> optional = Optional.ofNullable(s);
         //orElse(T other) 如果不为空,则返回具体的值,否则返回参数中的值
         Student student = optional.orElse(new Student("lisi", 24));
         System.out.println(student);
     }
    }