Java 中如果对象为 null 则获取默认值

问题描述 投票:0回答:6

我很想知道如何用 Java 编写以下代码的较短版本。

我有以下Java类(属于JAX-RS):

如果可能的话,我需要返回responseStatus的int值(响应不为空),否则需要返回默认的int状态值。

我不想仅仅为了这一小段代码而向我的项目添加任何库依赖项。

这是我首先想到的代码:

    private static int getDefaultStatusCodeIfNull(final Response response) {
        if (Objects.isNull(response)) {
            return Response.Status.INTERNAL_SERVER_ERROR.getStatusCode();
        }

        return response.getStatus();
    }

下面的代码使用 lambda 可能会更短,但它又长又难读:

    int status = Optional.ofNullable(response)
          .orElse(Response.status(Response.Status.INTERNAL_SERVER_ERROR).build()).getStatus();

有没有更短的单行方法来获取这个 int 值?

您认为第二个解决方案比第一个更好吗?

java lambda jersey jax-rs jersey-client
6个回答
2
投票

也许使用三元运算符?

return (response == null) ? Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() : response.getStatus();

1
投票

稍微干净一点的 lambda 版本是:

Optional.ofNullable(response).map(Response::getStatus).orElse(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode())

老实说,我认为这里的三元运算符更干净。


1
投票

我更喜欢你的第一个版本,因为使用 lambda 听起来有点矫枉过正。

您也可以使用三元运算符,正如其他人已经指出的那样:

private static int getDefaultStatusCodeIfNull(final Response response) {
    return response != null ? response.getStatus() : Response.Status.INTERNAL_SERVER_ERROR.getStatusCode();
}

0
投票

您可以使用三元运算符,将 if/else 放在一行上:

int status = (response == null) ? Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() : response.getStatus();

0
投票

在 Java 9 中:

Objects.requireNonNullElse(T obj, T defaultObj)


-2
投票
int status = response==null?Response.Status.INTERNAL_SERVER_ERROR.getStatusCode():response.getStatus();
© www.soinside.com 2019 - 2024. All rights reserved.