共计 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)
正文完