栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 optionalPerson = Optional.of(person);  //包装对象不为null的Optional实例(传入null值报错NullPointerException)
    Optional optionalNullable = Optional.ofNullable(person);    //包装对象可为null
    Optional 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");
}

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号