【Java】Optional

Optional主要是为了解决 NullPointerException (空指针异常) 的问题。

一般我们在处理空指针异常的问题都会使用条件判断语句,然后再进行操作。

这种其实理论上并没有什么问题,但是它会带来深度嵌套的问题,导致代码膨胀从而导致代码可读性十分糟糕。

 

创建optional对象

1. 声明一个空的 Optional

Optional<Object> opt = Optional.empty();

2. 依据一个非空值创建 Optional

Optional<Object> opt = Optional.of(value);
// if value is null will throw NullPointerExeption

3. 可接受null的 Optional

Optional<Object> opt = Optional.ofNullable(value);
// if valuse is null. opt will get an empty value

4. 使用map从 Optional对象中提取值

Optional<Object1> optObject = Optional.ofNullable(object1);
Optional<Object2> opt = optObject.map(Object1 :: getObject2);

这种仅能在操作一个对象时使用,多个对象时无法使用。

比如以下案例

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

如果使用map方式是使用可能是

Optional<Person> optPerson = Optional.of(person);
Optional<String> name = optPerson.map(Person::getCar)
                                 .map(Car::getInsurance)
                                 .map(Insurance::getName);

但是这种方法会报错。首先 optPerson是Optional<Person>类型的变量。

通过map方法操作的结果是一个Optional<Car> 类型的对象,此时一位着,map操作了一个 Optional<Optional<Car>> 。此时去调用 getInsurance 就是一个非法操作了。

5. 使用flatMap 链接 Optional 对象

用于连接多个对象的情况

Optional<Person> optPerson = Optional.of(person);
Optional<String> name = optPerson.flatMap(Person::getCar)
                                 .flatMap(Car::getInsurance)
                                 .map(Insurance::getName)
                                 .orElse("Unknow");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值