【发布时间】:2019-10-14 22:41:23
【问题描述】:
假设我们有这个先决条件,带有类定义:
class SomeComponent {
private String name;
public String getName(){
return this.name;
}
}
实例someComp是从数据存储中获取的,它可以是null
// someComp and name can be null
SomeComponent someComp = fetchFromDatastore(123);
String name = fetchNameFromWebService(123);
变量name 是通过网络服务填充的,它也可以是null。
结果应该以从 Web 服务获取的值的优先级加载。
我希望您在这里发表您的意见,让我们讨论一下这两行中哪一行更具可读性?
方法 A(使用 Optional)
String result = ObjectUtils.firstNonNull(name, Optional.ofNullable(someComp).map(SomeComponent::getName).orElse(null));
方法 B(使用三元运算符)
String result = ObjectUtils.firstNonNull(name, someComp != null ? someComp.getName() : null);
不确定Optional 是否给您带来了困惑!?我一直在尝试使用它们,有时会因为单线而失去指南针。也许,这也可能是愚蠢的,但我很好奇你的想法是什么?
【问题讨论】:
-
就个人而言,我发现使用
Optional以外的返回类型是“错误的”。但是,您或其他人是否同意我的观点取决于主观原因,因此您的问题可能会被关闭为“主要基于意见”。 -
当有两个可空级别时,差异变得更加明显;
Optional.ofNullable(someComp).map(SomeComponent::getSubComponent).map(SomeSubComponent::getName).orElse(null)与someComp != null ? (someComp.getSubComponent() != null ? someComp.getSubComponent().getName() : null) : null
标签: java oop java-stream refactoring