【愚公系列】2022年01月 Java教学课程 46-获取对象操作类Optional

2022-01-15 10:05:42 浏览数 (1)

文章目录

  • 一、Optional
    • 1.获取对象
    • 2.常用方法
    • 3.处理空指针的方法

一、Optional

1.获取对象

  • Optional概述 可能包含或不包含非null值的容器对象
  • 方法介绍
  • 示例代码
代码语言:javascript复制
public class OptionalDemo1 {
    public static void main(String[] args) {
        //method1();

        //public static <T> Optional<T> ofNullable(T value)
        //获取一个Optional对象,Optional封装的值对象可以是null也可以不是null
        //Student s = new Student("zhangsan",23);
        Student s = null;
        //ofNullable方法,封装的对象可以是null,也可以不是null。
        Optional<Student> optional = Optional.ofNullable(s);

        System.out.println(optional);
    }

    private static void method1() {
        //static <T> Optional<T> of(T value)    获取一个Optional对象,封装的是非null值的对象

        //Student s = new Student("zhangsan",23);
        Student s = null;
        //Optional可以看做是一个容器,里面装了一个引用数据类型的对象。
        //返回值就是Optional的对象
        //如果使用of方法,封装的对象如果为空,那么还是会抛出空指针异常
        Optional<Student> optional1 = Optional.of(s);
        System.out.println(optional1);
    }
}

2.常用方法

  • 方法介绍
  • 示例代码
代码语言:javascript复制
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封装的对象为空");
        }
    }
}

3.处理空指针的方法

  • 方法介绍
  • 示例代码
代码语言:javascript复制
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);
    }
}

0 人点赞