【发布时间】:2019-01-29 08:22:35
【问题描述】:
我正在尝试用可选的代码块替换下面的代码块,只是想检查这样做会不会产生任何不良影响,比如性能或类似的东西?
现有代码:
UserObj userObj=new UserObj();
Object result = fetchDetails();
if (null != result) {
userObj.setResult(result.toString());
}
使用 Java 8 Optional:
UserObj userObj=new UserObj();
Optional.ofNullable(fetchDetails()).ifPresent(var -> userObj.setResult(var.toString()));
进行此更改只是为了使代码看起来简洁,因为我的代码中有很多空检查块。
【问题讨论】:
-
正确的方法是如果
fetchDetails已经返回Optional。此类旨在由希望指示无结果的方法返回。否则额外的安全机制不会捕获(为了防止人们忘记空检查,如果他们只得到一个Optional,他们就不会忘记。因为他们无法在不触发检查的情况下访问内容)。跨度> -
我认为这个问题应该在
Code Review社区提出。 -
您的旧代码看起来很可疑:
userObj.setResult(userObj.toString())。显然,你实际上想要userObj.setResult(result.toString()) -
使用
Optional有一点点开销,您和您的用户可能永远不会注意到。您使用Optional的代码看起来不错。我同意那些说如果fetchDetails从一开始就返回Optional会更好。
标签: java lambda java-8 java-stream optional