在Java 11中的高效空值检查

huangapple go评论68阅读模式
英文:

Efficient null check in Java 11

问题

需要使用对象中深层嵌套的getter。

response.getServiceError().getErrorCode()

可能有一个或多个对象为空的情况。现在,我正在这样做:

if (response != null && response.getServiceError() != null && response.getServiceError().getErrorCode() != null && response.getServiceError().getErrorCode().equals("errCode123")) {
    // 做一些操作;
}

是否有更好和/或更优雅的方式来构建这个if条件?

英文:

I need to use a getter which is 3 levels down in the object.

response.getServiceError().getErrorCode()

It is possible one or more objects could be NULL. Now, I am doing this

if (response != null && response.getServiceError() != null && response.getServiceError().getErrorCode() != null && response.getServiceError().getErrorCode().equals("errCode123")) {
     //doSomething;
}

Is there a better and/or elegant way to construct that if condition?

答案1

得分: 9

使用Optional

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

Use Optional!

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

huangapple
  • 本文由 发表于 2020年9月18日 05:20:17
  • 转载请务必保留本文链接:https://go.coder-hub.com/63946331.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定