在同一个if语句中检查null并检查对象属性是不错的做法?
请考虑以下代码:
if (jamesBlunt != null && jamesBlunt.isReallyBad()) {
// Don't buy his records
}
这个特殊的代码是在java中,我知道表达式是从左到右计算的,所以从技术上来说它不会抛出NullPointerException,但一般来说这是任何语言的好习惯吗?
答案 0 :(得分:1)
你想使用&&而不是OR。
是的,最好在同一个if语句中检查null,替代方法(嵌套两个ifs)很难看,因为会增加更多的缩进。
但之前检查也没关系:特别是如果你想做一些错误检查。
答案 1 :(得分:1)
我认为||
是拼写错误,你的意思是&&
:)
回答你的问题:这取决于。
jamesBlunt
永远为空是否有意义?如果没有,那么最好有这样的做法:
void buyARecord(Artist jamesBlunt) {
if (jamesBlunt == null) {
throw new IllegalArgumentException("James should never be null!");
}
}
如果jamesBlunt
为空是有意义的,那么您的方法很好,假设null
和isReallyBad
在语义上意味着相同的事情。如果它们在语义上意味着不同的东西,那么你可能不应该将它们组合在一条线上。
你需要小心其他语言。许多(Java,C ++,C#等)的行为方式相同,但有些可能会从右向左进行评估或懒惰评估。特别注意像Lisp和Scheme这样的函数式语言,因为它们往往与Java和C#等面向对象语言的行为不同。
答案 2 :(得分:1)
就个人而言,我会将这些分开。空检查是在函数开头做的事情,通常用于验证函数参数,通常称为“保护子句”。这些检查通常会引发异常或返回函数定义的错误代码。
这些可以使代码更清晰,避免多级嵌套。如果您希望在相关对象上测试其他内容,它还可以避免重复空检查。