我很想知道如何在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值?
你认为第二个是第一个更好的解决方案吗?
答案 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();