2017-09-25 100 views
0

我很早就知道如何在Java中編寫下面的代碼的較短版本。如果Java中的對象爲null,則獲取默認值

我有以下的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(); 
} 

下面的代碼是可能與拉姆達短,但它是如此漫長而艱辛閱讀:

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

是否有任何較短的一行方式來獲得此int值?

你認爲第二個是第一個更好的解決方案嗎?

+0

我投票關閉這一問題作爲題外話,因爲代碼工作。有關如何改進代碼的問題屬於[代碼評論](https://codereview.stackexchange.com/)Stack Exchange, – AJNeufeld

回答

0

的稍微乾淨的λ版本是:

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

雖然說實話,我覺得這裏的三元運算符是清潔的。

0

您可以使用三元運算符,它可以讓你把一個if/else語句在同一行:

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

關於三元運算符的其他信息:https://www.sitepoint.com/java-ternary-運營商/ – jwils

2

使用三元運算符,也許?

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

我寧願你的第一個版本,因爲使用lanbda聽起來很像矯枉過正。

你也可以使用三元運算符,如其他人已經指出:

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