如何在if条件中避免NullPointerException

根据条件,我必须采取一些行动。 假设我有一个枚举“VoucherType”

现在我有一个代码,根据条件执行: -

private boolean verifyGiveAwayAccounting(GiveAwayMoneyVerificationEvent event) {

    if(event.getVoucherType().equals(VoucherType.GIVE_AWAY_MONEY_ON_SIGNUP)){
        someAction();
    }
    return verifySystemAccountTransaction(event);
}

如果事件类型为“GIVE_AWAY_MONEY_ON_SIGNUP”,我必须执行someAction()。 但我不必做任何额外的事件类型是除“GIVE_AWAY_MONEY_ON_SIGNUP”之外的任何事情。 所以当我调用这段代码时,我将voucherType设置为“GIVE_AWAY_MONEY_ON_SIGNUP”,并执行someAction()。

但对于任何其他类型的事件,我在if条件中获得空指针异常,因为我从不设置凭证类型,因为我不想做任何特殊的事情。 因此,为了避免出现nullPointerException,我将凭证代码设置为dummy(其他voucherType值),这在任何情况下都不会使用。 我有一种复杂的方式,我可以消除nullPointerException而不初始化事件中的VoucherType?


在对这个对象的属性进行测试之前,你应该总是测试你的对象是否为空。

if(enum != null && enum.Football) {
  //some action
}

如果event不是null ,在这种情况下,也许你可以颠倒你的测试:

private boolean verifyGiveAwayAccounting(GiveAwayMoneyVerificationEvent event) {
    if(VoucherType.GIVE_AWAY_MONEY_ON_SIGNUP.equals(event.getVoucherType())){
            someAction();
    }
    return verifySystemAccountTransaction(event);
}

否则你应该测试event是否为null之前:

private boolean verifyGiveAwayAccounting(GiveAwayMoneyVerificationEvent event) {
    if(event != null && VoucherType.GIVE_AWAY_MONEY_ON_SIGNUP.equals(event.getVoucherType())){
            someAction();
    }
    return verifySystemAccountTransaction(event);
}

根据WikiBook的定义:

当应用程序尝试使用具有null值的对象引用时,会引发NullPointerException。 这些包括:在由空引用引用的对象上调用实例方法。

如果您未实例化枚举值,则它的值为null 。 因此,程序试图引用一个包含null的对象,该对象抛出一个NullPointerException

因此,不,没有办法避免你的NullPointerException 。 您需要在尝试引用它们之前实例化变量。

链接地址: http://www.djcxy.com/p/91845.html

上一篇: How to avoid NullPointerException in if condition

下一篇: Refactor if statement to use appropriate pattern