Java8 中引入了一个特别有意思类:Optional,一个可以让我们更加轻松的避免 NPE(空指针异常,NullPointException)的工具。
很久很久以前,为了避免 NPE,我们会写很多类似if (obj != null) {}的代码,有时候忘记写,就可能出现 NPE,造成线上故障。在 Java 技术栈中,如果谁的代码出现了 NPE,有极大的可能会被笑话,这个异常被很多人认为是低级错误。Optional的出现,可以让大家更加轻松的避免因为低级错误被嘲讽的概率。
定义示例数据
先定义待操作对象,万能的Student类和Clazz类(用到了 lombok 和 guava):
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Clazz {
private String id;
private String name;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private String id;
private String name;
private Clazz clazz;
}
然后定义一组测试数据:
final Clazz clazz1 = new Clazz("1", "高一一班");
final Student s1 = new Student("1", "张三", clazz1);
final Student s2 = new Student("2", "李四", null);
final List<Student> students = Lists.newArrayList(s1, s2);
final List<Student> emptyStudents = Lists.newArrayList();
final List<Student> nullStudents = null;
创建实例:of、ofNullable
为了控制生成实例的方式,也是为了收紧空值Optional的定义,Optional将构造函数定义为private。想要创建Optional实例,可以借助of和ofNullable两个方法实现。
这两个方法的区别在于:of方法传入的参数不能是null的,否则会抛出NullPointerException。所以,对于可能是null的结果,一定使用ofNullable。
代码如下:
Optional.of(students);
Optional.of(emptyStudents);
Optional.ofNullable(nullStudents);
Optional类中还有一个静态方法:e