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 替换两个空检查的主要内容,如果未能解决你的问题,请参考以下文章