Optional主要是为了解决 NullPointerException (空指针异常) 的问题。
一般我们在处理空指针异常的问题都会使用条件判断语句,然后再进行操作。
这种其实理论上并没有什么问题,但是它会带来深度嵌套的问题,导致代码膨胀从而导致代码可读性十分糟糕。
1. 声明一个空的 Optional
Optional
2. 依据一个非空值创建 Optional
- Optional
- // if value is null will throw NullPointerExeption
3. 可接受null的 Optional
- Optional
- // if valuse is null. opt will get an empty value
4. 使用map从 Optional对象中提取值
- Optional
optObject = Optional.ofNullable(object1); - Optional
opt = optObject.map(Object1 :: getObject2);
这种仅能在操作一个对象时使用,多个对象时无法使用。
比如以下案例
public String getCarInsuranceName(Person person) { return person.getCar().getInsurance().getname(); }如果使用map方式是使用可能是
OptionaloptPerson = Optional.of(person); Optionalname = optPerson.map(Person::getCar) .map(Car::getInsurance) .map(Insurance::getName);但是这种方法会报错。首先 optPerson是Optional
类型的变量。 通过map方法操作的结果是一个Optional
类型的对象,此时一位着,map操作了一个 Optional > 。此时去调用 getInsurance 就是一个非法操作了。
5. 使用flatMap 链接 Optional 对象
用于连接多个对象的情况
- Optional
optPerson = Optional.of(person); - Optional
name = optPerson.flatMap(Person::getCar) - .flatMap(Car::getInsurance)
- .map(Insurance::getName)
- .orElse("Unknow");