文章目录
- 1 概述
- 2 Optional类的方法
- 3 总结
- 参考资料
1 概述
- 到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类, Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到GoogleGuava的启发,Optional类已经成为Java8类库的一部分。
- Optional类(java.util.Optional) 是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用 null 表示一个值不存在,现在Optional 可以更好的表达这个概念。并且可以避免空指针异常。
- Optional类的Javadoc描述如下:这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
2 Optional类的方法
@Test
public void test1() {
Girl girl = new Girl();
// of(T t):保证t是非空的
Optional optionalGirl = Optional.of(girl);
System.out.println(optionalGirl);
}
@Test
public void test2() {
Girl girl = new Girl();
// ofNullable(T t):t可以为null
girl = null;
Optional optionalGirl = Optional.ofNullable(girl);
System.out.println(optionalGirl);
// orElse(T t1):如果当前的Optional内部封装的t是非空的,则返回内部的t;
// 如果内部封装的t是空的,则返回orElse(T t1)方法中的参数t1
Girl girl1 = optionalGirl.orElse(new Girl("桥本环奈"));
System.out.println(girl1);
}
// 多重if判断非空
public String getGirlNameV1(Boy boy) {
if (boy != null) {
Girl girl = boy.getGirl();
if (girl != null) {
return girl.getName();
}
}
return null;
}
@Test
public void test3() {
Boy boy = new Boy();
boy = null;
String girlName = getGirlNameV1(boy);
System.out.println(girlName);
}
// 使用Optional类避免空指针和多重if判断
public String getGirlNameV2(Boy boy) {
Optional boyOptional = Optional.ofNullable(boy);
// 此时的boy1一定非空
Boy boy1 = boyOptional.orElse(new Boy(new Girl("高圆圆")));
Girl girl = boy1.getGirl();
Optional girlOptional = Optional.ofNullable(girl);
// 此时的girl1一定非空
Girl girl1 = girlOptional.orElse(new Girl("邱淑贞"));
return girl1.getName();
}
@Test
public void test4() {
Boy boy = null;
boy = new Boy();
// boy = new Boy(new Girl("石原里美"));
String girlName = getGirlNameV2(boy);
System.out.println(girlName);
}
3 总结
- Optional类是为了在程序中避免出现空指针异常而创建的。也是为了省略多重的 if 判断。
- 常用方法:ofNullable(T t),orElse(T t)
参考资料
- 尚硅谷Java零基础入门教程(含百道Java真题,2万多行Java代码实战)