使用Optional进行空检查

时间:2015-09-29 10:09:31

标签: java java-8 optional

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

var

这里" jcr:description"可以存在与否。如果它存在,我想在描述变量中使用该值,如果为null,则只需设置空白字符串以进行描述。 Lambda表达式也可以在这里使用吗?感谢

1 个答案:

答案 0 :(得分:9)

如果get("jcr:description")的结果可以是null,则不应在其上调用toString(),因为如果之前的操作没有任何内容,Optional可以执行此操作它的使用已经失败,NullPointerException

您想要什么,可以使用以下方式实现:

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 -> description = string);不是本地变量,而是字段,则可以使用description。但是,我不推荐它。