Java中的Optional类
Java中避免空指针异常的一个类,非常好用,适当使用,可以极大的优化代码逻辑,减少出错的概率
// 类静态方法
// 通过工厂方法创建Optional类,of需要确定有值,ofNullable的参数可以为null。
of()
ofNullable()
import java.util.Optional;
Optional<String> emptyOpt = Optional.empty();
Optional<String> emptyOpt1 = Optional.ofNullable(null);
Optional<String> emptyOpt2 = Optional.of("google");
System.out.println(emptyOpt.orElse("tencent"));
System.out.println(emptyOpt1.orElse("alibaba"));
System.out.println(emptyOpt2.orElse("baidu"));
// 是否有值判断
isPresent() 是否有值
ifPresent() 如果有实例才调用consumer,否则不做处理
// 访问
get() 确定有值才调用
orElse() 可以填默认值
orElseGet() 与orElse相似,区别在于生成默认值的方式不同
orElseThrow() 与get相似,区别在于可以跑出指定异常
// 处理
map() 有值的话调用mapping函数处理,否则不做处理
filter()
// 使用if-else导致业务流程不清晰
Item Item = ...
if (Item != null) {
String ItemName = Item.getItemName();
if (ItemName != null) {
return ItemName.toUpperCase();
} else {
return null;
}
} else {
return null;
}
// 使用Optional非常清晰
Item Item = ...
Optional<Item> ItemOpt = Optional.ofNullable(Item);
// 开启级联模式
return ItemOpt.map(Item::getItemName)
.map(String::toUpperCase)
.orElse(null);
// 错误使用
if(Item.isPresent()) {
return Item.get().getOrders();
} else {
return Collections.emptyList();
// 正确使用
return Item.map(u -> u.getOrders()).orElse(Collections.emptyList())