簡體   English   中英

如果對象在Java中為null,則獲取默認值

[英]get default value if the object is null in Java

我很想知道如何在Java中編寫以下代碼的簡短版本。

我有以下Java類(屬於JAX-RS):

如果可能,我需要返回responseStatus的int值(response不為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值?

您認為第二個是比第一個更好的解決方案嗎?

使用三元運算符,也許嗎?

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

您可以使用三元運算符,該運算符可以將if / else放在一行上:

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())

坦白地說,我認為這里的三元運算符更干凈。

我更喜歡您的第一個版本,因為使用lanbda聽起來像是過分殺傷。

您還可以使用三元運算符,正如其他人已經指出的那樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM