【问题标题】:java Parse Boolean that may be null to Booleanjava Parse Boolean 可能为空的布尔值
【发布时间】:2016-04-26 00:55:06
【问题描述】:

我注意到java.lang.Boolean 类的一个问题是它无法解析空值。我知道它有 parseBoolean 静态方法,但由于它的签名声明它只接受 String 而不是 Object

换句话说,它具有以下签名:

public static boolean parseBoolean(String s)

但不是:

Boolean.parseBoolean(Object)

在不发生 NullPointerException 的情况下检查布尔值的最佳方法是什么?

【问题讨论】:

  • 你想做什么?将Boolean(即真、假或空)转换为boolean?如果是这样,您必须决定是否希望 null 为 true 或 false。
  • 看看this有没有帮助。
  • 你认为parseBoolean(null)只适用于parseBoolean(Object)吗?如果不是,您希望如何将您的对象解析为Boolean
  • 你是如何在 NullPointerException 上失败的?
  • 我从一个对象实体接收到一个必须是布尔值的字段(因为它是实体),而 null 当然是错误的。所以我认为最好的答案就是将其与Boolean.TRUE 进行比较

标签: java boolean


【解决方案1】:

如果您希望解析返回 truefalsenull 作为 Boolean 对象,请查看 Apache Commons Lang。 BooleanUtils 有一个内衬可以做到这一点。

https://commons.apache.org/proper/commons-lang/javadocs/api-2.4/org/apache/commons/lang/BooleanUtils.html#toBooleanObject(java.lang.String)

BooleanUtils.toBooleanObject(null) == null
BooleanUtils.toBooleanObject("true") == true
BooleanUtils.toBooleanObject("false") == false
BooleanUtils.toBooleanObject("YES") == true
BooleanUtils.toBooleanObject("nO") == false

【讨论】:

    【解决方案2】:

    试试这个方法:

    Boolean.TRUE.equals(yourObj);
    

    【讨论】:

    • OP 可能需要null。问题说成Boolean 而不是boolean,对于只需要原语的其他人仍然有用
    【解决方案3】:

    您可以将其与Boolean.TRUEBoolean.FALSE 进行比较。示例:

    if (Boolean.TRUE == Box.modeled()) { //do somthing }

    【讨论】:

    • 这实际上很糟糕,因为从技术上讲,您可以创建新的布尔对象: Boolean b = new Boolean(true); b != Boolean.TRUE
    • 所以......你在问问题的同时回答了自己的问题?
    • 这也不能回答你的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 2015-11-18
    • 2019-04-05
    • 1970-01-01
    • 2014-02-09
    • 2013-11-30
    相关资源
    最近更新 更多