如何在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
。 您需要在尝试引用它们之前实例化变量。