【问题标题】:Utility method to convert Boolean into boolean and handle null in Java在 Java 中将布尔值转换为布尔值并处理 null 的实用方法
【发布时间】:2014-07-25 07:37:51
【问题描述】:

Java 中是否有一个实用方法可以将Boolean 转换为boolean 并自动处理对Boolean 的空引用为假?

【问题讨论】:

标签: java boolean utility-method


【解决方案1】:

怎么样:

boolean x = Boolean.TRUE.equals(value);

?这是一个单一的表达式,只有当 value 不为空且代表真实的 Boolean 引用时,才会计算为 true

【讨论】:

    【解决方案2】:

    您在寻找现成的实用程序吗?然后我认为 Commons-Lang BooleanUtils 就是答案。它有一个方法 toBoolean(Boolean bool).

    【讨论】:

      【解决方案3】:

      在 java 8 上你可以这样做:

      static boolean getPrimitive(Boolean value) {
              return Optional.ofNullable(value).orElse(false);
      }
      

      你也可以这样做:

      static boolean getPrimitive(Boolean value) {
              return Boolean.parseBoolean("" + value);
      }
      

      【讨论】:

      • 这两个都分配了一个不必要的对象。 Jon Skeet's answer 没有。
      • 两者都是“有效的”,内存开销可以忽略不计。(第一个只是一个可选的返回,如果它真的那么糟糕?)我非常清楚“jon skeets”的答案,但是这个更多的是展示什么是可能的,(更多的是 OP 的自动处理布尔值的空引用的上下文)。
      • 每次调用的一个不必要的对象分配在实际用例中每个布尔列、每行、每个数据库提取一次的代码中是不可忽略的。是的,JVM可能能够通过转义分析优化掉 Optional。但它也可能不会。当存在更短、更清晰、非分配的替代方案时,为什么要使用更长、不太清晰、分配的习语?
      • 恕我直言,请参阅 OP,它没有要求最优化的方法,而是自动处理 null 的方法。请结合上下文。根据您的推理,我想您是在提倡不要使用 Optional? PS:接受的答案是最合适的。
      • 按预期使用 Optional 时,我对 Optional 没有任何问题,它是可能返回结果的方法的返回类型。
      【解决方案4】:

      如果您是golfing,则显式空检查后跟automatic unboxingcanonical answer 短。

      boolean b=o!=null&&o; // For golfing purposes only, don't use in production code
      

      【讨论】:

        【解决方案5】:

        这将处理空值和布尔值

        booleanVal != null && Boolean.parseBoolean("" + booleanVal)
        

        【讨论】:

          【解决方案6】:

          我不知道它是否存在。我会写一个像这样的衬线:

          public static boolean getPrimitiveBoolean(Boolean bool) {    
             return bool == null ? false : bool.booleanValue();
          }
          

          【讨论】:

            【解决方案7】:

            这将是一种您可以编写的方法来解决问题。如果布尔值为 null,这将返回 false。

            public static boolean toBooleanDefaultIfNull(Boolean bool) {
                if (bool == null) return false;
                return bool.booleanValue();
            }
            

            【讨论】:

            • 返回 bool.booleanValue() ?真假;没什么用,只需要 return bool.booleanValue() ;)
            • Skeet 的回答比这要好得多,但无论如何我都会用你的建议改变我的。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-01-24
            • 2011-04-17
            • 2013-07-30
            • 1970-01-01
            • 1970-01-01
            • 2019-07-24
            相关资源
            最近更新 更多