【问题标题】:Java 8 Replace two null check with OptionalJava 8 用 Optional 替换两个空检查
【发布时间】:2022-01-16 07:24:54
【问题描述】:

下面是我的代码,它按预期工作。但我需要用 Optional.ofNullable 替换它

if (getFirstData != null && getSecondData !=null {
 ... doing my work here
} else {
  ... doing my else work here
}

如何使用Optionals.ofNullable(..) 替换两个 AND 空检查?

【问题讨论】:

  • 你为什么要这个?仅仅因为可以使用Optional,并不意味着您应该在任何地方都使用它来替换空检查。
  • @MarkRotteveel - 删除声纳。有声纳,这种方法有 10 个如果像这样的检查.. 我需要删除 '&&' 以便删除声纳
  • 听起来 Sonar 正在标记重复代码,而不是您正在执行“if”语句来进行空值检查。
  • @Ravi Sonars 规则是可配置的,并非所有规则都有意义。仅仅因为一个工具告诉你做一些愚蠢的事情,并不意味着你应该这样做。

标签: java sonarqube optional nullable


【解决方案1】:

这可能有点矫枉过正,但如果需要检查 多个 值是否为空值,可以像这样使用Optional

static boolean allNonNullsOptional(Object ... items) {
    return Stream.of(items).map(Optional::ofNullable).allMatch(Optional::isPresent);
}

但同样可以使用更短的Object::nonNull

static boolean allNonNulls(Object ... items) {
    return Stream.of(items).allMatch(Objects::nonNull);
}

【讨论】:

    【解决方案2】:

    从技术上讲,您想要的可以通过以下方式实现

    if (Optional.ofNullable(getFirstData).isPresent() && Optional.ofNullable(getSecondData).isPresent() ) {
     ... doing my work here
    } else {
      ... doing my else work here
    }
    

    但正如其他评论者已经指出的那样,这样做似乎并不明智。

    【讨论】:

      猜你喜欢
      • 2021-05-15
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 2023-03-31
      • 1970-01-01
      • 2015-08-03
      相关资源
      最近更新 更多