首页 > 其他分享 >Optional类详解

Optional类详解

时间:2022-10-27 12:33:32浏览次数:75  
标签:opt ofNullable com 详解 user null Optional

转自:

  ​​http://www.java265.com/JavaCourse/202206/3817.html​

下文笔者讲述jdk8中Optional关键字的功能简介说明,如下所示:

Optional关键字的功能

Optional类的功能:
1.用于处理空指针异常(NullPointerException)的问题
2.Optional是一个包装类,它可包装的对象可以是空,也可以是一个存在的对象

例: 常见的空指针异常判断示例

String  pId = user.getInfo().getId().toLowerCase();

//为了不产生空指针异常,我们需做以下的判断
if (user != null) {
Info info = user.getInfo();
if (info != null) {
Id pid = info.getId();
if (pid != null) {
pid = pid.toLowerCase();
}
}
}

那么,我们发现以上的代码非常的冗余,此时我们就可以使用Optional进行改写,例

String pId = Optional.ofNullable(user)
.flatMap(u -> u.getInfo())
.flatMap(a -> a.getId())
.map(c -> c.toLowerCase())
.orElse("default");

从以上Optional改写上,我们可以看出Optional写出的代码,非常的优雅
那么Optional到底如何使用呢?下文笔者将一一道来,如下所示

创建Optional实例

Optional<User> emptyOpt = Optional.empty();
以上将创建一个null optional对象示例

使用of()和ofNullable()方法创建Optional

注意事项:
of()方法,当传入一个null值时,则会包NPE(NullPointerException)异常

例:

//使用of方法创建的对象,可能报NPE异常
Optional<User> opt = Optional.of(user);

//此时我们需采用 ofNullable()方法创建Optional对象
//才能避免报异常
Optional<User> opt = Optional.ofNullable(user);

访问Optional对象的值

String name = "java265.com";
Optional<String> opt = Optional.ofNullable(name);
assertEquals("java265.com", opt.get());

注意事项:
以上的get方法,也可能报NPE异常,此时我们需使用isPresent()进行相应的判断


User user = new User("java265.com", "8888");
Optional<User> opt = Optional.ofNullable(user);
assertTrue(opt.isPresent());

assertEquals(user.getName(), opt.get().getName());

optional返回默认值

Optional类返回默认值,可使用orElse()方法或orElseGet方法
此方法的功能为当Optional为null时,返回默认值

标签:opt,ofNullable,com,详解,user,null,Optional
From: https://blog.51cto.com/u_15736642/5800747

相关文章

  • nginx配置文件location详解
    Centos7安装nginx完成后发现nginx.conf文件中没有server,只有events{...}和http{...},这是什么问题?在nginx.conf文件同目录的conf.d文件夹下的default.conf文件里面,应该是新......
  • pip包管理器安装第三方模块所遇问题详解
    原因分析:默认的python环境为2.7,而pip在安装的时候会提示Python2.7reachedtheendofitslifeonJanuary1st,2020.,因此我们需要更改运行环境。换言之,此时我们用pi......
  • Jenkins pipeline:pipeline 语法详解
    jenkins pipeline总体介绍 pipeline是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可......
  • Windows10 和 WinServer2012 Telnet配置和用法详解
     Windows10 和 WinServer2012 Telnet配置和用法详解 Telnet协议是TCP/IP协议族的其中之一,是Internet远程登录服务的标准协议和主要方式,常用于网页服务器的远程控制,可......
  • java教程之java继承示例详解
    什么是继承(extends)?继承是:新定义的类是从已有的类中获取属性和方法的现象。这个已有的类叫做父类,从这个父类获取属性和方法的类叫做子类。ExtendsDemo1.java......
  • mysql主从复制原理详解32讲
    请问Mysql的主从复制原理是什么?如果我要实现主从复制,需要怎么操作呢?(如果有具体教程就最好了)可以参考这篇文章下面关于数据库主从复制机制的原理概述,哪个是错误的?主库的主......
  • MySQL之——MySQL5.7以上my.cnf 配置文件详解
    简单配置,低配置服务器配置[client]#客户端设置port=3306socket=/data/mysql/data/mysql.sockdefault-character-set=utf8mb4[mysqld]user=mysql......
  • 微服务组件---- Spring Cloud Alibaba 链路追踪 skywalking 详解
    skywalking是什么【1】skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking是观察性分析平台和应......
  • tar 命令详解
    1.压缩命令[root@reg~]#tar-czvftxt3.tar.gztxt3txt3[root@reg~]#lstxt3txt3.tar.gz 2、解压命令[root@reg~]#lstxt4.tar.gz[root@reg~]#tar-xvf......
  • MyBatis学习笔记之Mapper文件的foreach标签详解
    0x00概述MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据。如:使用foreach来拼接in子语句。 在学习MyBatis......