Java Optional 最佳实践七条法则

为什么需要Optional隐藏空指针不确定性

Optional 隐藏了可能存在空指针的不确定性,比如:

List<String> numbers= ImmutableList.of("ONE", "TWO", "THREE");

return numbers.stream()
 .filter(number -> "FOUR".equals(number))
 .findAny()
 .toLoweCase();

结果会导致 NullPointerExceptions 空指针错误,而使用 if else 进行判断是一种切割器cutter味道:

List<String> numbers= ImmutableList.of("ONE", "TWO", "THREE");
String numberThatImLookingFour = 
numbers.stream()
 .filter(number -> "FOUR".equals(number))
 .findAny();
if(numberThatImLookingFour != null){
   
 return numberThatImLookingFour.toLowerCase();
}else{
   
 return "not found";
}

所以, 我们的目的是为库方法的返回类型提供一种有限的机制,其中需要一种明确的方式来表示“无结果”,并且对于这样的方法使用null绝对可能导致错误。

因此添加了Optional <T>,这不是一个真正的新概念,历史可以追溯到Haskell的Maybe monad。突然间,我们获得了JDK批准的表示可能存在或不存在的值的方式,和往常一样,在各地使用新功能的开发人员抓狂了。

空引用空指针是无数个错误的来源,通常也不能很好地标识“不存在”这个概念。

应该如何处理这个问题的重要部分来自DDD。在有界上下文的入口处我们说:’ 你不能通过 ':

传入领域的所有变量是执行业务逻辑所需的,我们必须减少编写if(obj == null)检查判断的代码行数量。我们仍然需要与外部世界(数据库查询,REST端点等)进行交互,并根据执行的逻辑交互输出。如果使用Optional 得当则可以提供帮助。

什么是Optional?

它是box类型ÿ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值