不要给 Optional 变量赋值为 null
如果你有一个变量声明为 Optional,则不要给它赋值为 null:
public Optional getInsurance() {
// 这里不应该给 Optional 变量赋值为 null,而应该直接赋值为 Optional.empty();
Optional insurance = null;
return insurance;
}
不要直接调用 Optional 的 get 方法
Optional insuranceOpt = InsuranceService.getInsurance():
// 这里不应该直接调用 get 方法,而应该在调用 get 方法之前线调用 isPresent() 方法进行判断
Insurance insurance = insuranceOpt.get();
if (insuranceOpt.isPresent()) {
// do something
} else {
// do something
}
使用 orElse() 方法来获取默认值
public String getName() {
Optional name = NameService.getName();
if (name.isPresent()) {
return name.get();
} else {
return DEFAULT_VALUE;
}
// 上面的代码可以简化为一行
return NameService.getName().orElse(DEFAULT_VALUE);
}
不要使用 orElse() 方法来获取需要计算的值,而应该使用 orElseGet() 方法来获取
public Optional getFromCache(String id) {
// 从缓存中获取
}
public Insurance getFromDb(String id) {
// 从数据库中获取
}
public Optional 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)
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net