我想使用Optional实用程序在JDK8中执行空检查。这是我写的代码,它给了我一个错误:
var
这里" jcr:description"可以存在与否。如果它存在,我想在描述变量中使用该值,如果为null,则只需设置空白字符串以进行描述。 Lambda表达式也可以在这里使用吗?感谢
答案 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
。但是,我不推荐它。