【问题标题】:Avoiding NullPointerException from Boolean从布尔值中避免 NullPointerException
【发布时间】:2014-08-12 09:36:02
【问题描述】:

我试图避免来自布尔值的 NullPointerException。我认为下面的代码可以工作,但事实并非如此。

if(Boolean.TRUE.equals(shareConnection.getConnection())){ // This could be null, True or False

}

有什么想法吗?我不想实现 try catch 语句,因为这已经在 catch 中了。

编辑

public class ShareConnection{

    public boolean getConnection() {
        return connection;
    }
}

【问题讨论】:

  • -3 ??投票者,您至少有任何答案或评论吗?
  • shareConnection是如何初始化的?
  • 你错了。 if(Boolean.TRUE.equals(null)){ } 不会导致 NPE。如果需要,请在此处查看:ideone.com/l2BbJu
  • 检查 NPE 的 shareConnection。
  • 在您的编辑中,您使用了原始布尔值,它永远不能为空。它的默认值为“假”。您可以只执行 if(shareConnection.getConnection()) {...} 而不将其与 Boolean.TRUE 进行比较。如果您仍然有 NPE,则可能是相关代码中的其他地方引起的。

标签: java android exception nullpointerexception


【解决方案1】:
if(Boolean.TRUE.equals(shareConnection.getConnection()))

这里唯一的 NPE 方法是

  • shareConnectionnull
  • getConnection() 中有一个 NPE

在此处使用调试器分析您的程序状态和/或发布更多代码以获得更具体的帮助。

【讨论】:

  • 你是对的,shareConnection 抛出了异常。谢谢@Iaalto
【解决方案2】:

这里有一些可读性问题也会让你的生活变得更加艰难。 1) 比较两个布尔值(当然是一个包装器和一个原语)

shareConnection.getConnection()

已经返回一个布尔值。 无需将此布尔值与 Boolean.TRUE 进行比较并在您的 if 中使用它。 只需使用:

if(shareConnection.getConnection())

2) 命名你的方法

方法名

getConnection()

让我相信,当我调用它时,我得到了(某种)联系。 相反,我得到真或假。 这就好像我向你要锤子,你说“是的”。

3) NullPointer 异常 正如前面的答案已经指出的那样,NPE 很可能是由

shareConnection

确保在调用此对象的方法之前初始化 this。

【讨论】:

    【解决方案3】:

    使用原始布尔值代替布尔类,这样它就不能为空。

    【讨论】:

    • equals 不应该抛出 NPE,就像用户 SURESH ATTA 评论的那样
    • Boolean.TRUE 不能为空,它是一个常数。
    猜你喜欢
    • 2022-10-05
    • 2014-08-11
    • 1970-01-01
    • 2010-09-21
    • 2013-12-08
    • 1970-01-01
    相关资源
    最近更新 更多