前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JDK8 新特性】Optional类

【JDK8 新特性】Optional类

作者头像
CODER-V
发布2023-03-09 09:08:08
2610
发布2023-03-09 09:08:08
举报
文章被收录于专栏:藏经阁

1. 背景

到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google在著名的Guava项目引入了Optional类,通过检查空值的方式避免空指针异常。受到Google的启发,Optional类已经成为Java 8类库的一部分。

2. 新特性

Optional 类(java.util.Optional) 是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。如果值存在,则isPresent()方法会返回true,调用get()方法会返回该对象。

Optional提供很多有用的方法,这样我们就不用显式进行空值检测

创建Optional类对象的方法:

  • static Optional empty() :用来创建一个空的Optional实例
    • static Optional of(T value) :用来创建一个Optional实例,value必须非空
    • static Optional ofNullable(T value) :用来创建一个Optional实例,value可能是空,也可能非空
  • 判断Optional容器中是否包含对象:
    • boolean isPresent() : 判断Optional容器中的值是否存在
    • void ifPresent(Consumer<? super T> consumer) :判断Optional容器中的值是否存在,如果存在,就对它进行Consumer指定的操作如果不存在就不做
  • 获取Optional容器的对象:
  • T get(): 如果调用对象包含值,返回该值。否则抛异常。T get()与of(T value)配合使用
  • T orElse(T other):orElse(T other) 与ofNullable(T value)配合使用,如果Optional容器中非空,就返回所包装值,如果为空,就用orElse(T other)other指定的默认值(备胎)代替
  • T orElseGet(Supplier<? extends T> other) :如果Optional容器中非空,就返回所包装值,如果为空,就用Supplier接口的Lambda表达式提供的值代替
  • T orElseThrow(Supplier<? extends X> exceptionSupplier) :如果Optional容器中非空,就返回所包装值,如果为空,就抛出你指定的异常类型代替原来的NoSuchElementException

示例:

代码语言:javascript
复制
    @Test
    public void test1(){
        String star = "kuki";
        star = null;

        // 创建一个可为空的实例
        java.util.Optional<String> optional = java.util.Optional.ofNullable(star);

        // 若start为空,则使用以下方案
        String newStar = "kuki2";
        String orElse = optional.orElse(newStar);

        System.out.println("orElse = " + orElse);
    }

也就时提供了一个备用方案,若传入的数据为null,则使用备用方案。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 背景
  • 2. 新特性
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档