Java新特性:Optional类
Java新特性:Optional类
Optional 类是 Java 8 才引入的,Optional 是个容器,它可以保存类型 T 的值,或者仅仅保存 null。Optional 提供了很多方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。
Java 8 引入 Optional 类,用来解决 NullPointerException。 Optional 代替 if…else
解决空指针问题,使代码更加简洁。
1、Optional类概述
1.1、Optional类介绍
Optional 类是 Java 8 才引入的,Optional 是个容器,它可以保存类型 T 的值,或者仅仅保存 null。Optional 提供了很多方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。
Java 8 引入 Optional 类,用来解决 NullPointerException。 Optional 代替 if…else
解决空指针问题,使代码更加简洁。
1.2、Java8之前的空指针异常判断
Java 在使用对象过程中,访问任何方法或属性都可能导致 NullPointerException:
例如我们通过以下方法,获取存在 student 对象中的 Age 值。
public String getIsocode (Student student){
return student.getAge();
}
在这样的示例中,如果我们想要避免由 student
或 student.age
为空而导致的空指针问题,我们就需要采用防御式检查减少 NullPointerException(在访问每一个值之前对其进行明确地检查):
public String getIsocode (Student student){
if (null == student) {
// doSomething
return "Unknown";
}
if (null = student.getAge()) {
// doSomething
return "Unknown";
}
return student.getAge();
}
然而,这种方案并不是很理想,因为为此会多出多个不同的退出点(return),使得代码维护变得艰难,之后每个可能的 null 检查都会新增一个退出点。
为了简化这个过程,我们来看看用 Optional 类是怎么做的。
1.3、Java8之后Optional的使用
当需要判断的量多时,此时的这些判断语句可能会导致代码臃肿冗余,为此 Java8 特意推出了 Optional 类来帮助我们去处理空指针异常。
下面是 Optional 的一些基本用法:
@Data
public class Student {
private Integer age;
}
---
public class Test {
public static void main(String[] args) {
// 假设 student 这个对象从数据库中查出的
Student student = getStudent();
// 创建一个可接受 null 的 Optiona l类
OptionalStudent>
optional = Optional.ofNullable(student);
// 用法1:获取 student 对象中的某个值,如果不存在的话则取默认值(不具有短路作用)
Integer a1 = optional.map(Student::getAge).orElse(20));
// 用法2:获取 student 对象中的某个值,如果不存在的话则取默认值(具有短路作用,因为是懒加载)
Integer a2 = optional.map(Student::getAge).orElseGet(() ->
Integer.MAX_VALUE);
// 用法3:判断对象是否存在,不存在则抛出异常
optional.orElseThrow(() ->
new RuntimeException("student不存在!"));
// 用法4:判断对象是否存在,存在的话对对象进行操作,例如给对象赋初始值
optional.ifPresent(o ->
o.setAge(18));
// 用法5:对象存在时,且年龄满足一定条件容器才会继续保存这对象,否则将会剔除
optional.filter(o ->
o.getAge() >
10);
}
}
2、Optional类使用
2.1、Optional类常用方法总结
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Java新特性:Optional类
本文地址: https://pptw.com/jishu/557762.html