【问题标题】:Get default value if the object is null in Java如果对象在 Java 中为空,则获取默认值
【发布时间】:2018-03-06 23:05:52
【问题描述】:

我很想知道如何用 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 值?

你认为第二个比第一个更好吗?

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为代码正在运行。关于如何改进代码的问题属于Code Review Stack Exchange,

标签: java lambda jersey jax-rs jersey-client


【解决方案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();
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-24
        • 2023-03-03
        • 2012-12-01
        • 2015-02-13
        • 2019-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多