(八)jdk8学习心得之Optional类
八、Optional 类
1、 作用:可以存放空指针null,主要用于解决空指针问题。
2、 使用方法
1) 创建对象(2种方法)
Optional optional = Optional.of(非null对象);
或者
Optional optional = Optional.ofNullable(任何对象);
2) 判断对象是否为null(1种方法)
Optional对象.isPresent();
3) 获取对(3种方法)
Optional对象.get();
Optional对象.orElse()
Optional对象.orElseGet();
例子:
package com.lennar.jdk8learn.learn; import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.junit.Test; import java.util.Optional;
import java.util.function.BiFunction; public class LearnOptional {
@Test
public void test() {
//1.创建
try {
Optional<Teacher> optional1 = Optional.of(null);//如果是null,则报空指针异常的错误
} catch (Exception e) {
System.out.println("optional1报错:" + e.toString());
}
try {
Optional<Teacher> optional2 = Optional.ofNullable(null);//允许存放null,不会报空指针的错误
} catch (Exception e) {
System.out.println("optional1报错:" + e.toString());
}
//2.空指针判断
Optional<Teacher> optional3 = Optional.ofNullable(null);
if (!optional3.isPresent()) {//null时返回false,非null时返回true
System.out.println("这个是null");
}
Optional<String> optional4 = Optional.ofNullable(new String(""));
if (!optional4.isPresent()) {//null时返回false,非null时返回true
System.out.println("这个是null");
} else {
System.out.println("这个不是null");
}
//3.获取Optional中的对象
try {
Teacher t0 = optional3.get();//确定有对象时返回对象,否则报空指针异常的错
System.out.println(t0);
} catch (Exception e) {
System.out.println("optional3中没有对象,为null");
}
Optional<Teacher> optional5 = Optional.ofNullable(new Teacher("1", "张三"));
Teacher t1 = optional5.get();
System.out.println(t1); Teacher t2 = optional3.orElse(new Teacher("2", "李四"));//对象非空返回对象,否则返回默认值(类型一致,在orElse中的值就是默认值)
System.out.println(t2);
Teacher t3 = optional5.orElse(null);
System.out.println(t3); Teacher t4 = optional3.orElseGet(() -> {//对象非空返回对象,否则调用orElseGet中的方法返回同类型的默认对象
String id = "3";
String name = "王五";
BiFunction<String, String, Teacher> function = Teacher::new;
return function.apply(id, name);
});
System.out.println(t4);
Teacher t5 = optional5.orElseGet(() -> {
String id = "4";
String name = "赵六";
BiFunction<String, String, Teacher> function = Teacher::new;
return function.apply(id, name);
});
System.out.println(t5); }
} @Data
@AllArgsConstructor
@NoArgsConstructor
class Teacher {
private String id;
private String name;
}
(八)jdk8学习心得之Optional类的更多相关文章
- (六)jdk8学习心得之Stream流
六.Stream流 1. 什么是stream流 现阶段,可以把stream流看成一个高级版的Iterator.普通的Iterator只能实现遍历,遍历做什么,就需要具体些功能代码函数了.而这个stre ...
- (五)jdk8学习心得之默认方法
五.默认方法 1. 使用方法:写在接口中,就是为了接口可以做一些事情. 2. 目的:有很多实现类,有一个公共的抽象方法,其实这些实现类实现该抽象方法的内容是完全一致的,完全没有必要都重新实现一遍.并且 ...
- (二)jdk8学习心得之Lambda表达式
二.Lambda表达式 1. 格式 (参数1,参数2,…,参数n)->{方法体} 注意: (参数1,参数2,...,参数n)要与方法接口中的参数一致,但是名字可以不一样. 此外,方法类型接口,有 ...
- (一)jdk8学习心得之遍历
一.遍历 -- 最好和stream流连用 使用jdk8提供的forEach进行遍历时,采用的是多线程的操作,理论上讲是会比原来的方法更快.但是注意,系统启动时需要加载lambda框架的内容.因此如果通 ...
- (七)jdk8学习心得之join方法
七.join方法 1. 作用:将list或者数组按照连接符进行连接,返回一个字符串. 2. 使用方法 1) String.join(“连接符”,数组对象或者list对象) 2) 首先转换成stream ...
- (四)jdk8学习心得之函数式接口
四.函数式接口 1. 格式 注:抽象方法就是通过lambda表达式或者方法引用实现. 2. Jdk提供的函数式接口(这里提供五个最为常用的) 3. 技巧 通过函数式接口,就可以把一个函数作为一个参数进 ...
- (三)jdk8学习心得之方法引用
三.方法引用 https://www.jianshu.com/p/c9790ba76cee 这边博客写的很好,可以首先阅读,在这里感谢这篇文章的博主. 1. 格式 调用者::调用者具备的方法名 2. ...
- 我的MYSQL学习心得(八) 插入 更新 删除
我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...
- 我的MYSQL学习心得(八)
原文:我的MYSQL学习心得(八) 我的MYSQL学习心得(八) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL ...
随机推荐
- DotNetCore跨平台~EFCore废弃了TransactionScope取而代之的Context.Database.BeginTransaction
回到目录 TransactionScope是.net平台基于的分布式事务组件,它默认为本地事务,同时当系统有需要时可以自动提升为分布式事务,而对系统的前提是要开启MSDTC服务,必要时需要在数据库服务 ...
- 研究windows下SVN备份及还原恢复方案
windows下SVN备份方案 备份策略 svn备份一般采用三种方式: 1)svnadmin dump 2)svnadmin hotcopy 3)svnsync. 注意,svn备份不宜采用普通的 ...
- 【ASP.NET Core快速入门】(三)准备CentOS和Nginx环境
基本软件 VMware虚拟机 centos:http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-170 ...
- 痞子衡嵌入式:开启NXP-MCUBootUtility工具的HAB加密功能 - CST(中英双语)
1 Reason for enabling HAB encryption function 为什么要开启HAB加密功能 NXP-MCUBootUtility is a tool designed fo ...
- Keras入门(四)之利用CNN模型轻松破解网站验证码
项目简介 在之前的文章keras入门(三)搭建CNN模型破解网站验证码中,笔者介绍介绍了如何用Keras来搭建CNN模型来破解网站的验证码,其中验证码含有字母和数字. 让我们一起回顾一下那篇文 ...
- Windows环境下安装配置Mosquitto服务及入门操作介绍
关键字:在windows安装mosquitto,在mosquitto中配置日志,在mosquitto中配置用户账号密码 关于Mosquitto配置的资料网上还是有几篇的,但是看来看去,基本上都是基于L ...
- Excel导出数据库数据
package com.hxkr.util; import java.io.FileOutputStream; import java.util.ArrayList; import java.util ...
- 学习笔记—XML
XML XML简介 XML指可扩展标记语言(EXtensible Markup Language),是一种标记语言. XML是一种灵活的语言,标签没有被预定义,需要自行定义标签. 通常,XML被用于信 ...
- C# E店宝格格家接口对接
一.实现图片 二.实现通用方法 /// <summary> /// 调用通用方法 /// </summary> /// <param name="strURL& ...
- Vue开发插件
(一)Vue.js的插件应该有一个公开方法:install. 这个方法的第一个参数是Vue构造器,第二个参数是一个可选的选项对象,一般是如下操作: MyPlugin.install = functio ...