如果Java中的对象为null,则获取默认值
问题描述:
我很早就知道如何在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值?
你认为第二个是第一个更好的解决方案吗?
答
的稍微干净的λ版本是:
Optional.ofNullable(response).map(Response::getStatus).orElse(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode())
虽然说实话,我觉得这里的三元运算符是清洁的。
答
您可以使用三元运算符,它可以让你把一个if/else语句在同一行:
int status = (response == null) ? Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() : response.getStatus();
+0
关于三元运算符的其他信息:https://www.sitepoint.com/java-ternary-运营商/ – jwils
答
使用三元运算符,也许?
return (response == null) ? Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() : response.getStatus();
答
int status = response==null?Response.Status.INTERNAL_SERVER_ERROR.getStatusCode():response.getStatus();
答
我宁愿你的第一个版本,因为使用lanbda听起来很像矫枉过正。
你也可以使用三元运算符,如其他人已经指出:
private static int getDefaultStatusCodeIfNull(final Response response) {
return response != null ? response.getStatus() Response.Status.INTERNAL_SERVER_ERROR.getStatusCode();
}
我投票关闭这一问题作为题外话,因为代码工作。有关如何改进代码的问题属于[代码评论](https://codereview.stackexchange.com/)Stack Exchange, – AJNeufeld