jdk1.8可以选择使用 Optional类来优雅地解决空指针异常
首先我们要先了解空指针异常是怎么出现的
// null调用方法时
null.method();
// null调用属性时
null.attribute;
当一个对象,例如一个User对象引用Address对象时,若User对象为空,此时就会报空指针异常
一般来说,我们就是一步步排查空对象来定位空指针异常的
实体类对象User和Address代码如下
public class User {
private Address address;
public Address getAddress() {
return address;
}
}
public class Address {
private String addressDetail;
public String getAddressDetail() {
return addressDetail;
}
}
此时,我们一般的做法都是进行非空判断,如下所示
if (user != null){
String addressDetail = user.getAddress().getAddressDetail();
System.out.println("addressDetail = " + addressDetail);
}
使用 Optional类 可以更优雅地避过空指针异常
String addressDetail = Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getAddressDetail)
.orElse(null);
System.out.println("addressDetail = " + addressDetail);
当任意一个map方法中出现空指针异常时,都会调用orElse方法,返回一个null,不报空指针异常
使用链式编程和lambda表达式的方式编写代码,使得代码逻辑更加清晰,在日常开发中,我们应多用 Optional类 来避免空指针异常。