gpt4 book ai didi

java - 空安全 boolean 表达式评估

转载 作者:行者123 更新时间:2023-12-02 04:32:18 25 4
gpt4 key购买 nike

是否有一种 Null 和 NullPointer 安全方法来计算 boolean 表达式。

这是我们代码库中的示例 -

private boolean serviceReturnedSuccess(Response response) {
boolean isSuccess = true;
if (response.hasMetadata()) {
Metadata responseMetadata = response.getMetadata();
if (responseMetadata.hasReturnCode()) {
if (responseMetadata.getReturnCode() != 0) {
isSuccess = false;
}
}
}
return isSuccess;
}

我想写的是-

private boolean serviceReturnedSuccess(Response response) {
return NullSafeBooleanEvaluator.valueOf(response.getMetadata().getReturnCode() != 0);
}

当我查看 apache commonsGuava's common object utils 中的 BooleanUtils 时,我找不到开箱即用的东西。

理想情况下,我正在寻找一个标准库中的实现,否则我正在寻找一种通用的方法来实现它。

最佳答案

不可能有 NullSafeBooleanEvaluator.valueOf(response.getMetadata().getReturnCode() != 0)因为参数表达式在传递给 NullSafeBooleanEvaluator.valueOf() 之前必须先求值。最接近的解决方案是

private boolean serviceReturnedSuccess(Response response) {
try {
return response.getMetadata().getReturnCode() != 0;
}
catch (NullPointerException e) {
return false;
}
}

这当然有一些代码味道。

正如 Egor 已经评论的那样,Java 8 针对此类问题引入了新的可选类(另请参阅此信息 article ):

但我不相信它会导致可读的代码:

if (response.flatMap(Response::getMetadata).map(MetaData::getReturnCode).orElse(0) != 0)

(这段代码中可能有很多错误,但你明白了)。

上面的文章还提到了 Groovy 的安全导航操作符?这允许非常优雅的表达:

 if (response.getMetaData()?.getResponseCode()? != 0)

(再次未测试)。但 Java 不是 Groovy,所以我认为如果您不想/不能使用可选,您当前的代码可能是最佳选择。

关于java - 空安全 boolean 表达式评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31301282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com