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

时间:2017-09-25 21:18:32

标签: java lambda jersey jax-rs jersey-client

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

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

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

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

这是我首先想到的代码:

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值?

你认为第二个是第一个更好的解决方案吗?

5 个答案:

答案 0 :(得分:2)

使用三元运算符,也许?

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

稍微清洁的lambda版本是:

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

虽然老实说,我认为这里的三元运营商更清洁。

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:-2)

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