Java 8 Optional 类 解决空指针异常

从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。

  @Test
    void optionalTest() {
        Lambda lambda = new Lambda();
        lambda = null;
        //调用
        Integer age = age(lambda);
        Integer integer = age1(lambda);
        System.out.println(integer+"optional");
        System.out.println(age);

    }
    //原始写法
    public Integer age(Lambda lambda){
        //Person 没有实例化 是null 会报空指针异常
        //判断空指针
        if (lambda != null) {
            //判断空指针
            if (lambda.getPerson() != null) {
                Integer age = lambda.getPerson().getAge();
                return age;
            }
        }
        return null;

    }

    //使用Optional
    public Integer age1(Lambda lambda) {
        //ofNullable()该方法创建Optional 对象,如果lambda 是 null 输出的是 null,不会抛出异常
        
        Optional<Lambda> lambda1 = Optional.ofNullable(lambda);
        //.orElse(),如果传入的Lambda 是空,就会用参数里面新new 的,new Lambda(new Person(2)
        // 如果不是空,就会用传入的
        //所以lambda2,一定非空
        Lambda lambda2 = lambda1.orElse(new Lambda(new Person(2)));
        Person person = lambda2.getPerson();
        //
        Optional<Person> person1 = Optional.ofNullable(person);
        //所以person2,一定非空
        Person person2 = person1.orElse(new Person(18));
        Integer age = person2.getAge();
        return age;
    }

案例1

 public static void main(String[] args) {
        String str = "hello";
        String str1 = null;
        //把str放入Optional容器中
        //ofNullable可以放入空值
        Optional<String> str2 = Optional.ofNullable(str1);
        //判断是不是空
        if (str2.isPresent()) {
            String s1 = str2.get();
            System.out.println(s1);
        } else {
            System.out.println("空");
        }
        //  orElse 如果存在就返回值,如果不存在就设置一个默认值
        String s2 = str2.orElse(str);
        System.out.println(s2);
        //orElseGet 参数是重写 get 方法如果存在就返回值,如果不存在就设置一个默认值
        String s3 = str2.orElseGet(() -> {
            return "hahah";
        });

        System.out.println(s3);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yzhSWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值