我很想知道如何用 Java 编写以下代码的较短版本。
我有以下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();
}
下面的代码使用 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();
稍微干净一点的 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();
}
您可以使用三元运算符,将 if/else 放在一行上:
int status = (response == null) ? Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() : response.getStatus();
在 Java 9 中:
Objects.requireNonNullElse(T obj, T defaultObj)
。
int status = response==null?Response.Status.INTERNAL_SERVER_ERROR.getStatusCode():response.getStatus();