Java 11 中的高效空检查

Tro*_*zan 4 java null null-check java-11

我需要使用对象中 3 个级别的 getter。

response.getServiceError().getErrorCode()
Run Code Online (Sandbox Code Playgroud)

一个或多个对象可能为 NULL。现在,我正在这样做

if (response != null && response.getServiceError() != null && response.getServiceError().getErrorCode() != null && response.getServiceError().getErrorCode().equals("errCode123")) {
     //doSomething;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好和/或优雅的方式来构建 if 条件?

JDr*_*818 7

使用Optional

Optional.ofNullable(response)
    .map(Response::getServiceError)
    .map(ServiceError::getErrorCode)
    .filter(code -> code.equals("errCode123"))
    .ifPresent(code -> {
        // doSomething
    });

Run Code Online (Sandbox Code Playgroud)

  • “多么简洁又方便啊!” (3认同)
  • 关闭,但是: 1) 第三个`map()`应该是`filter()`,因为`equals()`返回一个`boolean`,它被`map()`返回自动装箱为`Boolean`类型,即使是“false”,因此“不等于”条件仍然“存在”为“Boolean.FALSE”对象。--- 2) `ifPresent` 接受一个 `Consumer`,所以它没有返回值。删除“return”语句。--- 3) 在第三个 `map()` 调用中缺少 `)`。 (3认同)