前言
Java8新特性 :Optional
它是一个可以为null的容器对象,Optional提供了很多有用的方法,这样我们就不用显式进行空值检测,可以让我们的代码更加优雅可观。
Java8之前大家常用的判空方式
Student对象
@Data
public class Student {
private String name;
private Hobby hobby;
public Optional<Hobby> getHobbyOfNull(){
return Optional.ofNullable(this.hobby);
}
}
Hobby对象
@Data
public class Hobby {
private String name;
}
String name = student.getName();
String hobbyName = student.getHobby().getName();
当对象为空直接引用将造成NullPointerException 需要再调用每个对象前进行空判断
// 示例一 嵌套参数
String name ="";
if(student != null){
if (student.getName() != null){
name = student.getName();
}
}
//示例二 嵌套对象
String hobbyName ="";
if(student != null){
Hobby hobby = student.getHobby();
if (hobby != null && hobby.getName() != null){
hobbyName = hobby.getName();
}
}
当层级关系变多 代码会显得非常臃肿
Optional方式
示例一
String name = Optional.ofNullable(student).map(e -> e.getName()).orElse("");
示例二
hobbyName = Optional.ofNullable(student).flatMap(Student::getHobbyOfNull).map(Hobby::getName).orElse("");