关于java:Java-中-Optional-的使用技巧

2次阅读

共计 1082 个字符,预计需要花费 3 分钟才能阅读完成。

不要给 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)

正文完
 0