Java中将布尔值转换为小写布尔值并处理空值的实用方法

44

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


3
嗯……这只是一行代码…… - Stephen C
可能是布尔值、条件运算符和自动装箱的重复问题。 - DavidPostill
3
是的,但楼主可能正在寻找一行聪明的代码;)(看看skeet的解决方案) - Suresh Atta
6个回答

103

如何:

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

? 这是一个单个表达式,仅在value非空且为代表真的Boolean引用时才会计算为true


9
在Java 8上,你可以这样做:
static boolean getPrimitive(Boolean value) {
        return Optional.ofNullable(value).orElse(false);
}

您还可以这样做:
static boolean getPrimitive(Boolean value) {
        return Boolean.parseBoolean("" + value);
}

2
这两个都分配了一个不必要的对象。Jon Skeet的答案没有这样做。 - Clement Cherlin
两种方法都是“有效的”,内存开销可以忽略不计。(第一个只是可选返回,如果它真的很糟糕吗?)我非常清楚“Jon Skeet”的答案,但这更多地展示了可能性(尤其是在OP自动处理布尔值的空引用上下文中)。 - Shailesh Aswal
1
在一个实际使用案例中,每次调用一次的代码中,每行、每个布尔列、每个数据库获取中都有一个不必要的对象分配是不可忽略的。是的,JVM 可能能够通过逃逸分析优化掉Optional。但它也可能不会这样做。为什么要使用更长、不太清晰、分配习惯,而存在更短、更清晰、不分配的替代方案呢? - Clement Cherlin
请恕我直言,请参考原帖,它并没有要求最优的解决方案,而是自动处理 null 的方式。请在上下文中理解问题。按照您的推理,我想您是主张不使用 Optional 吗?顺便说一句,被采纳的答案是最合适的。 - Shailesh Aswal
1
当Optional被用作预期的方式,即方法的返回类型可能有结果也可能没有结果时,我对其没有任何问题。 - Clement Cherlin

2

我不知道它是否存在。我会写一个像这样的一行代码:

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

2

1

如果你在进行高尔夫球,那么一个显式的空值检查后跟着自动拆箱规范答案更短。

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

0
这是一个你可以编写的方法,可以解决问题。如果布尔值为空,它将返回false。
public static boolean toBooleanDefaultIfNull(Boolean bool) {
    if (bool == null) return false;
    return bool.booleanValue();
}

1
return bool.booleanValue() ? true : false; 这行代码非常无用,直接写成 return bool.booleanValue() 就好了 ;) - flotothemoon
1
Skeet的答案比这个好多了,但我还是会根据你的建议来修改我的答案。 - Connorelsea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接