JAVA高级——Optional

本文探讨了为何要避免null指针异常,并介绍了Java 8的Optional类如何优化null判断。通过实例展示了Optional的入门、使用map、flatMap、filter等方法优化代码,以及如何避免嵌套Optional对象和处理Optional流。Optional作为容器类,通过提供非空保障,提高了代码的健壮性和可读性。
摘要由CSDN通过智能技术生成

JAVA高级——Optional

    • 二、为何要避免null指针
    • 三、使用Optional优化null判断
        • 3.1.1 使用Optional优化Car类
        • 3.1.2 Optional的几种模式
        • 3.1.3 使用map从Optional中提取值
        • 3.1.4 使用flatMap链接Optional对象
          • 3.1.4.1 使用Optional获取car的保险公司名称
          • 3.1.4.2 使用Optional解引用串接的Person/Car/Insurance对象
        • 3.1.5 操作由Optional对象构成的Stream流
        • 3.1.6 默认行为及解引用Optional对象
        • 3.1.7 两个Optional对象的组合
        • 3.1.8 使用Filter进行剔除

一、概述

1、null引用引发的问题,以及为什么要避免null引用

2、从null到Optional:以null安全的方式重写你的域模型

3、让Optional发光发热: 去除代码中对null的检查

4、读取Optional中可能值的几种方法

5、对可能缺失值的再思考

二、为何要避免null指针

其实根据有关资料显示,每个一程序的设计者们都会为 NullOpint 而苦恼,而且有大部分的运行调试的问题都会在 空指针 上面,所以接下来这篇文章就告诉大家如何去使用 Optional 避免空指针;

代码一:

public class Person {
 
    private Car car;
    public Car getCar() {
  return car; }
}
public class Car {
 
    private Insurance insurance;
    public Insurance getInsurance() {
  return insurance; }
}
public class Insurance {
 
    private String name;
    public String getName() {
  return name; }
}

那么接下来这个代码有什么问题呢?

public String getCarInsuranceName(Person person) {
 
    return person.getCar().getInsurance().getName();
}

其实如果其中一个出现了空,那么这个代码就会报错,程序不能正常进行运行;

2.1 使用if-else

所以我们可以将代码改为: 防御的方式进行避免空指针

第一种方式:

public String getCarInsuranceName(Person person) {
 

    if (person != null) {
       (以下5行)每个null检查都会增加调用链上剩余代码的嵌套层数
        Car car = person.getCar();                       
        if (car != null) {
                          
            Insurance insurance = car.getInsurance();    
            if (insurance != null) {
               
                return insurance.getName();
            }
        }
    }
    return "Unknown";
}

防御模式二: 采用每个退出节点都进行判断

public String getCarInsuranceName(Person person) {
 
    if (person == null) {
        (以下9行)每个null检查都会添加新的退出点
        return "Unknown";                          
    }                                              
    Car car = person.getCar();                     
    if (car == null) {
                
        return "Unknown";                          
    }                                              
    Insurance insurance = car.getInsurance();      
    if (insurance == null) {
                  
        return "Unknown";
    }
    return insurance.getName();
}

经过上述 if else 的一顿操作,是不感觉代码非的不美观,庆幸java提供一个判断为空的类,那个就是Optional。接下来我们会说明如何正确的使用Optional类。

三、使用Optional优化null判断

3.1 Optional 入门

这里 Optional 就像是一个容器,里面放一个泛型,

  1. 如果泛型对象为空,那么这个 Optional<T> 就是 null ;
  2. 否者,可以调用 Optional 中的方法进行操作里面的 对象 元素;(接下里会具体介绍 Optional 中的方法)

变量存在时,Optional类只是对类简单封装。变量不存在时,缺失的值会被建模成一个“空”的Optional对象,由方法Optional.empty()返回。Optional.empty()方法是一个静态工厂方法,它返回Optional类的特定单一实例。

你可能还有疑惑,null引用和Optional.empty()有什么本质的区别吗?

从语义上讲,你可以把它们当作一回事儿,但是实际中它们之间的差别非常大:如果你尝试解引用一个null,那么一定会触发NullPointerEx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值