当前位置: 首页 > 知识库问答 >
问题:

可选vs三元运算符[关闭]

李甫
2023-03-14

假设我们有一个前提条件,有了类定义:

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通过web服务填充,也可以是null。结果应该加载从web服务获取的值的优先级。

我希望你们在这里发表意见,让我们讨论一下这两行中哪一行更具可读性?

String result = ObjectUtils.firstNonNull(name, Optional.ofNullable(someComp).map(SomeComponent::getName).orElse(null));
String result = ObjectUtils.firstNonNull(name, someComp != null ? someComp.getName() : null);

不确定可选是否会给您带来困惑!?我一直在尝试使用它们,有时会因为一句话而失去指南针。也许,这也可能很愚蠢,但我很好奇你的想法是什么?

共有2个答案

鞠乐
2023-03-14

如果您控制着fetchFromDatastorefetchNameFromWebService,那么我想说,首先返回nulls是老式的做法,您应该考虑将它们升级为返回可选的,因为这些场景正是引入可选的原因。例如,Spring的存储库使用了可选的

Optional<T> findById(ID primaryKey);

如果fetchFromDatastorefetchNameFromWebService都返回可选,那么您不仅可以降低NPE的风险,还可以使用Java9的简单地做:

String result = fetchFromDatastore(123)
                               .or(()->fetchNameFromWebService(123))
                               .orElse("");

其中,仅在必要时执行。当然,这些可以根据需要进行链接。

无可否认,Java8有点麻烦

杜阳炎
2023-03-14

在我看来,我喜欢方法B。我认为它比方法A更具可读性。也就是说,如果你理解三元运算符

此外,如果您可以将该三元语句包含在一组()中,它将使代码更具可读性。

除此之外,我相信方法B将比方法A快得多。你应该对它们进行基准测试。

 类似资料:
  • 问题内容: 有人可以解释PHP中的三元运算符速记()和空合并运算符()之间的区别吗? 它们什么时候表现不同,什么时候以相同的方式表现(如果甚至发生)? VS。 问题答案: 当您的第一个参数为null时,它们基本相同,不同之处在于,当您有未定义的变量时,null合并不会输出。在PHP7.0迁移的文档有这样一段话: 对于需要将三元数与isset()结合使用的常见情况,已将空合并运算符(??)添加为语法

  • 条件(三元)运算符是 JavaScript 仅有的使用三个操作数的运算符。一个条件后面会跟一个问号(?),如果条件为 truthy ,则问号后面的表达式A将会执行;表达式A后面跟着一个冒号(:),如果条件为 falsy ,则冒号后面的表达式B将会执行。本运算符经常作为 if 语句的简捷形式来使用。(MDN) 三元运算符,也称条件运算符、三目运算符。 三元运算符可以代替简单的 if 语句。 1. 语

  • 问题内容: 是否可以更改此: …对三元运算符? 问题答案: 好吧,中的行为就像这样…… …另一种看待它的方式… 你的问题有点含糊,我们必须在这里假设。 如果(且仅当)声明了一个返回值(,等。)-现在看来似乎没有做到这一点通过你的代码-那么你可以做到这一点… 如果callFunction(…)不返回值,那么你将无法使用三元运算符!就那么简单。你将使用不需要的东西。 请发布更多代码以清除所有问题 尽管

  • 问题内容: 是否可以在Python中一行执行此操作? 我已经尝试过三元运算符: 但是我的IDE(MyEclipse)不喜欢它,没有一个。 问题答案: 是的,您可以这样做: 如果为假,则短路将开始,并且右侧将不被评估。如果为true,则将评估右侧并添加元素。 我只是指出,执行上述操作是完全非Python的,无论如何,最好编写此代码: 示范:

  • 问题内容: 有人可以解释为什么这样的代码吗? 产生以下编译器错误: 不兼容的条件操作数类型ArrayList和HashSet 由于我不明白的原因,以下内容解决了该问题 我正在使用Java 1.4。 问题答案: 这是1.4 中的 错误 ,并已根据bugreport 5080917 进行了修复。 评估 这是一个错误。 xxxxx @ xxxxx 2004-07-30

  • 我们可以使用三元运算符轻松实现条件表达式。 以下示例演示了这一点 - 例子 (Example) condition expression ? statement1 : statement2 当条件表达式返回true时,将执行statement1; 否则将执行statement2。 例如,以下示例从两个给定数字中查找最大数字。 例子 (Example) [jerry]$ awk 'BEGIN {