如果对象在 Java 中为空,则获取默认值
Posted
技术标签:
【中文标题】如果对象在 Java 中为空,则获取默认值【英文标题】:Get default value if the object is null in Java 【发布时间】:2018-03-06 23:05:52 【问题描述】:我很想知道如何用 Java 编写以下代码的较短版本。
我有以下 Java 类(属于 JAX-RS):
javax.ws.rs.core.Response如果可能的话,我需要返回 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 值?
你认为第二个比第一个更好吗?
【问题讨论】:
我投票决定将此问题作为题外话结束,因为代码正在运行。关于如何改进代码的问题属于Code Review Stack Exchange, 【参考方案1】:我更喜欢你的第一个版本,因为使用 lambda 听起来有点矫枉过正。
您也可以使用三元运算符,正如其他人已经指出的那样:
private static int getDefaultStatusCodeIfNull(final Response response)
return response != null ? response.getStatus() : Response.Status.INTERNAL_SERVER_ERROR.getStatusCode();
【讨论】:
【参考方案2】:int status = response==null?Response.Status.INTERNAL_SERVER_ERROR.getStatusCode():response.getStatus();
【讨论】:
【参考方案3】:稍微干净的 lambda 版本是:
Optional.ofNullable(response).map(Response::getStatus).orElse(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode())
虽然老实说,我认为这里的三元运算符更干净。
【讨论】:
我同意三元运算符更干净。【参考方案4】:使用三元运算符,也许?
return (response == null) ? Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() : response.getStatus();
【讨论】:
【参考方案5】:您可以使用三元运算符,让您将 if/else 放在一行:
int status = (response == null) ? Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() : response.getStatus();
【讨论】:
关于三元运算符的附加信息:sitepoint.com/java-ternary-operator以上是关于如果对象在 Java 中为空,则获取默认值的主要内容,如果未能解决你的问题,请参考以下文章
如果对象存在于全局中,则R从函数中从全局环境中获取对象,但如果不存在则使用不同的默认值