【问题标题】:Null check using Optional使用可选的空值检查
【发布时间】:2015-12-26 18:36:12
【问题描述】:

我想使用 Optional 实用程序在 JDK8 中执行 null 检查。这是我正在编写的代码,它给了我一个错误:

java.util.Optional stringToUse = java.util.Optional.of(childPage.getContentResource().getValueMap().get("jcr:description").toString());
stringToUse.ifPresent(description = stringToUse);

这里的“jcr:description”可以存在也可以不存在。如果它存在,我想在描述变量中使用该值,如果为 null,则简单地设置空白字符串进行描述。也可以在这里使用 Lambda 表达式吗?谢谢

【问题讨论】:

  • 使用ofNullable 而不是of

标签: java java-8 optional


【解决方案1】:

如果get("jcr:description") 的结果可以是null,则不应在其上调用toString(),因为Optional 无能为力,如果在使用之前的操作已经失败并出现@987654325 @。

你想要的,可以使用:

Optional<String> stringToUse = Optional.ofNullable(
    childPage.getContentResource().getValueMap().get("jcr:description")
).map(Object::toString);

那么你可以把它当作

if(stringToUse.isPresent())
    description = stringToUse.get();

如果“什么都不做”是不存在的值的预期操作。或者您可以为这种情况指定一个备用值:

description = stringToUse.orElse("");

那么,description 总是被赋值,要么使用 jcr:description 的字符串表示形式,要么使用空字符串。

你可以使用stringToUse.ifPresent(string -&gt; description = string);,如果description不是一个局部变量,而是一个字段。但是,我不推荐它。

【讨论】:

  • 能否解释一下为什么不推荐它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-13
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
相关资源
最近更新 更多