Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 361|回复: 0

Java--8--新特性--Optional--有效防止空指针异常

[复制链接]
  • TA的每日心情
    奋斗
    昨天 06:33
  • 签到天数: 800 天

    [LV.10]以坛为家III

    2050

    主题

    2108

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    725426
    发表于 2021-6-4 02:33:42 | 显示全部楼层 |阅读模式

    Optional<T> 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。

    下面是这个类的一些常用方法!

    package OptionalP;
    
    import LambdaP.Employee;
    import org.junit.Test;
    import java.util.Optional;
    
    public class Optional1 {
        /*
         * Optional 容器类:用于尽量避免空指针异常
         *         Optional.of(T t) : 创建一个 Optional 实例
         *         Optional.empty() : 创建一个空的 Optional 实例
         *         Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例
         *         isPresent() : 判断是否包含值
         *         orElse(T t) :  如果调用对象包含值,返回该值,否则返回t
         *         orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值
         *         map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
         *         flatMap(Function mapper):与 map 类似,要求返回值必须是Optional
         */
    
        @Test
        public void test(){
            //Optional.of(T t) : 创建一个 Optional 实例
            Optional<Employee> employee = Optional.of(new Employee());
            System.out.println(employee.get());//LambdaP.Employee{name='null', age=0, salary=0}
            //of方法是不能构建一个null对象的,否则会报错 NullPointerException 虽然报空指针,但是这时候我们就不需要一个个的Debug了,直接就能锁定出错行
    
            //Optional.empty() : 创建一个空的 Optional 实例
            Optional<Object> empty = Optional.empty();
            System.out.println(empty.get());
            //empty方法是构建一个新的空Optional对象,Optional中的内容是空的但是Optional对象不是空的,这时候调用get方法获取内容会出错
            //NoSuchElementException: No value present
    
            //Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例
            Optional<Object> o = Optional.ofNullable(null);
            System.out.println(o.get());
            //ofNullable是允许构建一个空对象的,但是同上面一个一样,是无法获取里面的值的,因为没值
            //报错java.util.NoSuchElementException: No value present
    
            //isPresent() : 判断是否包含值
            Optional<Employee> employees = Optional.ofNullable(null);
            if(employees.isPresent()){
                System.out.println("不为空");
            }else {
                System.out.println("为空");
            }
            //为空  由此就可以看出,如果Optional中包含内容的话那么他会返回true,否则返回false
    
            //orElse(T t) :  如果调用对象包含值,返回该值,否则返回t
            Optional<Object> objectOptional = Optional.ofNullable(null);
            Object orElse = objectOptional.orElse(new Employee("orElse", 11, 1555));
            System.out.println(orElse);
            //LambdaP.Employee{name='orElse', age=11, salary=1555}  可以看出orElse作用了,如果是空就返回后面指定创建的,否则就返回ofNullable后封装的对象
    
    
            //orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值
            Optional<Object> o2 = Optional.ofNullable(null);
            Object o1 = o2.orElseGet(() -> 1);
            System.out.println(o1);
            // 1 orElseGet 里面是要求的是一个供给型接口Supplier  ,所以就可以根据我们的需求随意的处理和返回任何东西
    
            //map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
            Optional<Employee> o3 = Optional.ofNullable(new Employee("orElse", 11, 1555));
            Optional<Integer> integer = o3.map((e) -> e.getSalary() + 100000);
            System.out.println(integer);
            //Optional[101555]     现在就对封装的对象中的工资进行了操作
    
            //flatMap(Function mapper):与 map 类似,要求返回值必须是Optional
            Optional<Employee> orElse4 = Optional.ofNullable(new Employee("orElse", 11, 1555));
            Optional<Integer> integer4 = orElse4.flatMap((e) -> Optional.ofNullable(e.getSalary() + 100000));
            System.out.println(integer4);
            //Optional[101555]
            //这里需要注意的是返回值必须是一个封装以后的Optional对象
        }
    }

    上面就是一些基本的Optional的操作方法!

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-11-5 07:48 , Processed in 0.057635 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表