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

举报
愚公搬代码 发表于 2022/01/05 23:05:27 2022/01/05
【摘要】 一、Optional 1.获取对象Optional概述可能包含或不包含非null值的容器对象方法介绍方法名说明static <T> Optional<T> of(T value)获取一个Optional对象,封装的是非null值的对象static <T> Optional<T> ofNullable(T value)获取一个Optional对象,Optional封装的值对象可以是null也...

一、Optional

1.获取对象

  • Optional概述

    可能包含或不包含非null值的容器对象

  • 方法介绍

    方法名 说明
    static <T> Optional<T> of(T value) 获取一个Optional对象,封装的是非null值的对象
    static <T> Optional<T> ofNullable(T value) 获取一个Optional对象,Optional封装的值对象可以是null也可以不是null
  • 示例代码

    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.常用方法

  • 方法介绍

    方法名 说明
    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封装的对象为空");
            }
        }
    }
    

3.处理空指针的方法

  • 方法介绍

    方法名 说明
    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);
        }
    }
    
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200