Java8 引入的 Optional类。主要用来解决空指针异常(NullPointerException)
,空指针异常是导致Java应用程序失败的最常见原因。
Optional类可以理解为一个容器:它既可以保存类型T的对象,也可以保存null。
Optional类提供了很多有用的方法,并实现了检查空值的功能,程序员就不用显式地写空值检测的代码,再结合函数式编程,使得代码更加干净,简洁。
一、Optional类的使用Optional类可以理解为一个容器:它既可以保存类型 T的对象,也可以保存 null。
1.1 of方法of:为非null的值创建一个optional,如果传入为null,则会空指针。
@Test
public void testOf(){
JUser jUser = new JUser();
jUser.setId(100L);
jUser.setUsername("赵云");
jUser.setPazzword("abc123");
jUser.setHeight(1.78D);
jUser.setBirthday(new Date());
jUser.setStatus(JUserStatusEnum.ACTIVATE);
Optional optionalJUser = Optional.of(jUser);
System.out.println(optionalJUser.get()); // 输出结果:jUser信息
jUser = null;
Optional optionalJUser2 = Optional.of(jUser);
System.out.println(optionalJUser2.get()); // 输出结果:java.lang.NullPointerException
}
1.2 ofNullable方法
ofNullable:为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。
@Test
public void testOfNullable(){
JUser jUser = null;
Optional optionalJUser = Optional.ofNullable(jUser);
System.out.println(optionalJUser); // 输出结果:Optional.empty
JUser jUser1 = optionalJUser.get();// 输出结果:在这一行报错啦,java.lang.NullPointerException: No value present
}
1.3 empty方法
empty:返回一个空 Optional实例。
注意: Optional.empty() 所有保存 null包装成的 Optional对象,而且是单例模式
的。与泛型无关。
@Test
public void testEmpty(){
Optional empty = Optional.empty();
System.out.println(empty); // 输出结果:Optional.empty
Object o1 = Optional.empty();
Object o2 = Optional.empty();
System.out.println(o1 == o2);// 输出结果:true
}
2、验证 Optional实例
2.1 isPrensent方法
isPrensent:如果值存在返回true,不存在返回false。
@Test
public void testIsPresent(){
JUser jUser = null;
Optional optionalJUser = Optional.ofNullable(jUser);
boolean present = optionalJUser.isPresent();
System.out.println(present); // 输出结果:false
}
2.2 ifPresent方法
ifPresent:接受一个Consumer参数,如果对象不为空,就调用consumer接口。否则不做处理。
@Test
public void testIfPresent(){
JUser jUser = new JUser();
jUser.setId(100L);
jUser.setUsername("赵云");
jUser.setPazzword("abc123");
jUser.setHeight(1.78D);
Optional optionalJUser = Optional.ofNullable(jUser);
optionalJUser.ifPresent(u -> {
// 不为 null时才会执行断言
System.out.println(u);// 输出结果:jUser信息
});
}
3、Optional实例使用
3.1 get方法
get:如果有值则返回,没有值抛出 NoSuchElementException异常
@Test
public void testGet(){
JUser jUser = null;
Optional optionalJUser = Optional.ofNullable(jUser);
// JUser jUser1 = optionalJUser.get(); // 输出结果:java.lang.NullPointerException
// 可以使用 isPresent方法检查
if(optionalJUser.isPresent()){
System.out.println(optionalJUser.get());// 输出结果:此时为空,不执行该语句
}
}
3.2 orElse(方法
orElse(T other):如果保存的值不是null,则返回原来的值,否则返回 other。
@Test
public void testOrElse(){
JUser jUser = null;
Optional optionalJUser = Optional.ofNullable(jUser);
JUser jUser1 = optionalJUser.orElse(new JUser());
System.out.println(jUser1);// 输出结果:jUser实例的默认信息
// JUser{id=null, username='null', pazzword='null', age=null, age2=0, sex=null, height=null, height2=0.0, birthday=null, status=null}
}
3.3 orElseGet方法
orElseGet(Supplier
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?