2017-09-25 58 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(); 
} 
相关问题