使用可选的空检查
Null check using Optional
我想在 JDK8 中使用 Optional 实用程序执行 null 检查。这是我正在编写的代码,它给我一个错误:
java.util.Optional stringToUse = java.util.Optional.of(childPage.getContentResource().getValueMap().get("jcr:description").toString());
stringToUse.ifPresent(description = stringToUse);
此处"jcr:description"可以存在也可以不存在。如果它存在,我想在描述变量中使用该值,如果为空,则只需设置空白字符串进行描述。也可以在这里使用 Lambda 表达式吗?谢谢
如果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
不是局部变量,而是字段。不过我不推荐。
我想在 JDK8 中使用 Optional 实用程序执行 null 检查。这是我正在编写的代码,它给我一个错误:
java.util.Optional stringToUse = java.util.Optional.of(childPage.getContentResource().getValueMap().get("jcr:description").toString());
stringToUse.ifPresent(description = stringToUse);
此处"jcr:description"可以存在也可以不存在。如果它存在,我想在描述变量中使用该值,如果为空,则只需设置空白字符串进行描述。也可以在这里使用 Lambda 表达式吗?谢谢
如果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
不是局部变量,而是字段。不过我不推荐。