Java8新特性 Optional类
Optional类
文章目录
- Optional类
- 一、简介
- 介绍
- 常用方法
- 测试数据
- 二、使用
- 创建Optional类对象
- 获取Optional容器的数据
- 避免空指针异常的使用
一、简介
1. 介绍
- Optional类是为了在程序中避免出现空指针异常而设计的
- Optional
类(java.util.Optional)是一个容器类,它可以保存一个类型为T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用null表示一个值不存在,现在Optional可以更好的表达这个概念 - Optional类的 Javadoc 描述如下:这是一个可以为null的容器对象。如果这个值存在则
isPresent()
方法会返回true,调用get()
方法会返回此值
2. 常用方法
3. 测试数据
public class Girl {
private String name;
//以及其余JavaBean结构
}
public class Boy {
private Girl girl;
//以及其余JavaBean结构
}
二、使用
1. 创建Optional类对象
@Test
public void test1(){
Girl girl = new Girl();
//1. Optional.of(T t) : 创建一个Optional实例,t必须非空
Optional<Girl> optionalGirl = Optional.of(girl);
System.out.println(optionalGirl); //Optional[Girl{name='null'}]
//若t为空,报空指针异常
}
@Test
public void test2() {
Girl girl = null;
//2. Optional.ofNullable(T t) : 创建一个Optional实例,t可以为null
Optional<Girl> optionalGirl = Optional.ofNullable(girl);
System.out.println(optionalGirl); //Optional.empty
}
@Test
public void test3() {
//3. Optional.empty() : 创建一个空的Optional实例
Optional<Object> empty = Optional.empty();
System.out.println(empty); //Optional.empty
}
2. 获取Optional容器的数据
@Test
public void test() {
Girl girl = null;
Optional<Girl> optionalGirl = Optional.ofNullable(girl);
System.out.println(optionalGirl); //Optional.empty
//orElse(T t1) : 如果当前的Optional内部封装的数据是非空的,返回此数据;如果封装的数据是空的(null),则返回参数指定的数据
Girl girl1 = optionalGirl.orElse(new Girl("花泽香菜"));
System.out.println(girl1); //Girl{name='花泽香菜'}
//一定可以保证girl1是非空的,如果Optional内部封装的数据为空则返回赵丽颖,避免了空指针异常
}
3. 避免空指针异常的使用
public class OptionalTest {
//定义一个方法,防止出现空指针异常
public String getGirlName(Boy boy){
//参数boy可能是空的
Optional<Boy> boyOptional = Optional.ofNullable(boy);
//此时的boy1一定非空
Boy boy1 = boyOptional.orElse(new Boy(new Girl("迪丽热巴")));
//当boy没有给girl属性赋值时,获取到的girl可能为空
Girl girl = boy1.getGirl();
Optional<Girl> girlOptional = Optional.ofNullable(girl);
//girl1一定非空
Girl girl1 = girlOptional.orElse(new Girl("古力娜扎"));
return girl1.getName();
}
@Test
public void test1(){
Boy boy = null;
String girlName = getGirlName(boy);
System.out.println(girlName); //迪丽热巴
}
@Test
public void test2() {
Boy boy = new Boy();
String girlName = getGirlName(boy);
System.out.println(girlName); //古力娜扎
}
@Test
public void test3() {
Boy boy = new Boy(new Girl("王祖贤"));
String girlName = getGirlName(boy);
System.out.println(girlName); //王祖贤
}
}
还没有评论,来说两句吧...