(1)Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
(2)Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。
(3)Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
(4)Optional 类的引入很好的解决空指针异常。
注:以上是教程中简介的Java8新特性Optional类的作用。
例如下列代码:
// 最外层对象
class School {
Student student;
}
// 第二层对象
class Student {
String name;
Classroom classroom;
}
// 最底层对象
class Classroom {
String roomNumber;
}
假设我们需要获取 School 对象对底层的 Classroom 中的 roomNumber属性,我们必须写一堆的非空校验,来防止发生 NullPointerException。按照我们以往的方法是不是应该进行下列这样的检验。
// 繁琐的代码
School school= new School ();
if (school!= null && school.student!= null && school.student.classroom != null) {
System.out.println(school.student.classroom.roomNumber);
}
而通过optional类我们可以将以上代码修改为这样:
Optional.of(new School())
.map(School::getStudent)
.map(Student::getClassroom)
.map(Classroom::getRoomNumber)
.ifPresent(System.out::println); // 如果不为空,最终输出 RoomNumber的值