Java 8 用 Optional 替换两个空检查

Posted

技术标签:

【中文标题】Java 8 用 Optional 替换两个空检查【英文标题】:Java 8 Replace two null check with 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 规则是可配置的,并非所有规则都有意义。仅仅因为一个工具告诉你做一些愚蠢的事情,并不意味着你应该这样做。 【参考方案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

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

【讨论】:

以上是关于Java 8 用 Optional 替换两个空检查的主要内容,如果未能解决你的问题,请参考以下文章

如何更好地使用Java 8的Optional

Java基础之Optional类(JDK1.8新特性)

Java 8中的Optional 类型与 Kotlin 中的可空类型

如何更好地使用Java 8的Optional

Java 8 Optional:优雅地避免 NPE

Java 8 - Optional全解