我对这个问题感到困惑: 是否存在以下三行中的第一行可以产生java.lang.NullPointerException的情况?
if (mJobs == null || mJobs.size() == 0) { <-- trace shows exception here
return null;
}
此例外情况出现在未经验证的Android 4.4.4手机上。 mJobs声明如下:
ArrayList<Job> mJobs;
任何想法都将受到高度赞赏。
更新:这次崩溃发生了数次运行一次。
答案 0 :(得分:3)
我认为您的NullPointerException
没有任何方式来自第一行代码。我打赌你运行的代码是从你正在寻找的不同版本的源代码编译的,让你相信错误与实际不同。我会重新编译你当前的代码,然后重新运行它。
答案 1 :(得分:1)
不,假设您使用的是java.util.ArrayList
,而不是您自己的实施。
使用isEmpty()
代替size() == 0
会更清楚。我还会检查这个代码是如何被调用的,因为你在这两种情况中都返回null
。
答案 2 :(得分:0)
编辑说java&#34;短路&#34;评估永远不应该导致mJobs.size()被评估,你可以尝试它,看看它是否失败。
if (mJobs == null) {
return null;
}
if (mJobs.size() == 0) { <-- trace shows exception here
return null;
}
答案 3 :(得分:0)
如果mJobs为null,则可以在mjobs.size()中抛出空指针异常
if (mJobs == null || (mJobs !=null && mJobs.size() == 0)) {
return null;
}
答案 4 :(得分:0)
问题是或者当然,或者意味着它所说的,所以运行时正在评估该方面的两个方面,或者在继续之前是真实的。在评估中不会发生短路,因此如果使用三元运算,可以将它们组合在一起进行短路评估。与拆分它们的工作原理相同,只是更短。
if (mJobs == null ? true : mJobs.size() == 0) {
return null;
}