(八)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 ...
随机推荐
- ASP.NET Core 使用 SignalR 遇到的 CORS 问题
问题 将 SignalR 集成到 ASP.NET Core MVC 程序的时候,按照官方 DEMO 配置完成,但使用 DEMO 页面建立连接一直提示如下信息. Access to XMLHttpReq ...
- zk分布式任务管理
在我们的系统开发过程 中不可避免的会使用到定时任务的功能,而当我们在生产环境部署的服务超过1台时,就需要考虑任务调度的问题,防止两台或多台服务器上执行同一个任务,这个问题今天咱们就用zookeeper ...
- java jdk 8反编译工具JD-GUI、procyon-decompiler、luyten、crf下载使用简介
本文对常用的反编译工具进行简单介绍 JD-GUI.procyon-decompiler.luyten.crf 反编译工具分类 JD-GUI JDK7以及之前可以使用 JD-GUI,如果版本&g ...
- 玩转Spring Cloud之API网关(zuul)
最近因为工作原因,一直没有空写文章,所以都是边忙项目,边利用空闲时间,周末时间学习总结,最终在下班回家后加班加点写完本篇文章,若有不足之处,还请谅解,谢谢! 本文内容导航: 一.网关的作用 二.网关与 ...
- linux-2.6.18源码分析笔记---中断
一.中断初始化 中断的一些硬件机制不做过多的描述,只介绍一些和linux实现比较贴近的机制,便于理解代码. 1.1 关于intel和linux几种门的简介 intel提供了4种门:系统门,中断门,陷阱 ...
- Java web的一些面试题
1.Tomcat 的优化经验 答:去掉对 web.xml 的监视,把 jsp 提前编辑成 Servlet. 有富余物理内存的情况,加大 tomcat 使用的 jvm 的内存 2.HTTP 请求的 GE ...
- 给dao层注入jdbcTemplate时的一个强行bug(jdbcDaoSupport不要随便用!用了要记得!)
记录Dao层一个鱼唇至极的错误 这一天我在使用Spring的进行注解配置项目时, 我的Idea给我抛了一个如下的错误: Exception in thread "main" org ...
- PHP 安装扩展 phpize
报错 执行 phpize 时, 报如下错误: grep: /usr/include/php/main/php.h: No such file or directory grep: /usr/inclu ...
- DataTable克隆行
DataRow Adr = ds.Tables[].NewRow(); Adr.ItemArray = (].Rows[].ItemArray.Clone(); ds.Tables[].Rows.Ad ...
- 008. 阻塞&非阻塞、同步&异步
阻塞 非阻塞:关注的对象是调用者: 阻塞:调用者发起调用后,处于等待状态,直到该调用有返回: 非阻塞:调用者发起调用后,不需要等待返回,可以往下执行: 同步 异步: 关注的对象是被调用者: 同步:服 ...