Java 8 (5/6篇) - Optional 避免空指针

为了解决当值为 null 的时候会报错 NullPointerException 导致程序崩溃退出,以及Debug定位到错误代码难的痛点。Optional 是一个容器来包装对象,它可能包含值也可能为空值。

方法说明

Optional.of ()

Optional.ofNullable ()

Optional.empty ()

创建Optional对象

包装对象不为null(否则空指针异常)

包装对象可为null

包装对象为null

isPresent ()包装对象值是否存在(不要使用if当作传统null判断使用,违背设计初衷)
get ()获取包装对象的值(如果为null,报错NoSuchElementException)
orElse (T other)获取包装对象的值,有值就返回,为null返回传入的默认值(类型和包装对象的类型一样)
orElseGet (Supplier other)获取包装对象的值,有值就返回,为null返回函数的值
orElseThrow (Supplier exceptionSupplier)获取包装对象的值,有值就返回,为null返回一个Throwable对象
ifPresent (Consumer consumer)如果包装对象的值不为null,对包装对象进行消费
filter (Predicate predicate)符合判断就返回Optional本身,否则返回包装对象值为null的Optional
map (Function mapper)对包装对象进行函数运算
flatMap ()将一个二维的Optional对象映射成一个一维的对象
main() {
    Person person = new Person("张三", 18);
    //创建对象
    Optional<Person> optionalPerson = Optional.of(person);  //包装对象不为null的Optional实例(传入null值报错NullPointerException)
    Optional<Person> optionalNullable = Optional.ofNullable(person);    //包装对象可为null
    Optional<Object> optionalEmpty = Optional.empty();  //包装对象值为null
    //判断包装对象值是否存在 isPresent()
    boolean isPersonExist = optionalPerson.isPresent();
    //获取包装对象值(需先判断存在) get()
    Person person1 = optionalPerson.get();  //如果值为null,报错NoSuchElementException
    //获取包装对象值,有值则返回,否则返回默认值 orElse()
    Person personElse = optionalPerson.orElse(new Person("李四", 22));
}

//传统null判断
public String getName(Person person) {
    if (person == null) {
        return "Unknown";
    }
    return person.getName();
}

//相比传统null判断,Optional写法更简便
public String getName2(Person person) {
    return Optional.ofNullable(person).map(p -> p.getName()).orElse("Unknown");
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值