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

Get default value if the object is null in Java

我很想知道如何在 Java.

中编写以下代码的较短版本

我有以下 Java class(属于 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值的方法?

您认为第二种方案比第一种方案更好吗?

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

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

可以使用三元运算符吗?

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

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

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

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

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

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

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