不要给 Optional 变量赋值为 null

如果你有一个变量声明为 Optional,则不要给它赋值为 null:

public Optional<Insurance> getInsurance() {
    // 这里不应该给 Optional 变量赋值为 null,而应该直接赋值为 Optional.empty();
    Optional<Insurance> insurance = null;
    return insurance;
}

不要直接调用 Optional 的 get 方法

Optional<Insurance> insuranceOpt = InsuranceService.getInsurance():
// 这里不应该直接调用 get 方法,而应该在调用 get 方法之前线调用 isPresent() 方法进行判断
Insurance insurance = insuranceOpt.get();

if (insuranceOpt.isPresent()) {
    // do something
} else {
    // do something
}

使用 orElse() 方法来获取默认值

public String getName() {
    Optional<String> name = NameService.getName();
    if (name.isPresent()) {
        return name.get();
    } else {
        return DEFAULT_VALUE;
    }
    
    // 上面的代码可以简化为一行
    return NameService.getName().orElse(DEFAULT_VALUE);
}

不要使用 orElse() 方法来获取需要计算的值,而应该使用 orElseGet() 方法来获取

public Optional<Insurance> getFromCache(String id) {
    // 从缓存中获取
}

public Insurance getFromDb(String id) {
    // 从数据库中获取
}

public Optional<Insurance> getInsurance(String id) {
    // 使用 orElse() 不管是否从缓存中获取到数据都会执行从数据库中查询的逻辑
    return getFromCache(id).orElse(getFromDb(id));
    // 应该修改为如下的方式,这样的话只有当缓存里面获取不到值的时候,才会从数据库中获取
    return getFromCache(id).orElseGet(() -> getFromDb(id));
}

参考

12 recipes for using the Optional class as it’s meant to be used (oracle.com)


用户bPbhIAe
16 声望0 粉丝