使用 Java 8 函数接口避免 Null Check

使用 Optional

Optional是核心类库的新成员,用来替换null。相信大家对NPE已经司空见惯,在代码里也有不少 null check,null 这个东西也是颇有争议的, 而Optional可以消除我们这种厌恶感,鼓励我们适当时候去检查null值,防止程序崩溃。

示例 :

Shop.java

class Shop {
private Integer provinceId;
...
}

不使用 Java8 的 Null Check:

if (shop.getProvinceId() != null) {
ProvinceEntity productEntity = provinceJpaRepository.findOne(shop.getProvinceId());
if (productEntity != null) {
shop.setProvinceName(productEntity.getName());
}

}

使用 Java8 的 Null Check:

Optional.ofNullable(shop).map(Shop::getProvinceId)
.map(id -> provinceJpaRepository.findOne(id))
.ifPresent(p -> shop.setProvinceName(p.getName()));

对比上面的代码,可以发现使用Java8的特性,可以大大减少代码量,Optional的API文档化提高了可读性。