【发布时间】:2011-07-27 19:52:16
【问题描述】:
代码审查工具抱怨 saveSafeScan(...) 中 safeScanWarnings 的可能空指针取消引用在行 if (safeScanWarnings != Null & safeScanWarnings.size() > 0)
我想知道这怎么可能?这是因为我们通过引用返回集合吗?
protected void saveSafeScan(final Response response, final Dtec dtec) throws dtecException
{
Collection<String> safeScanWarnings = dtec.getSafeScanWarnings();
if (safeScanWarnings!=null && safeScanWarnings.size()>0)
{
Iterator<String> iterator = safeScanWarnings.iterator();
int i = 0;
while (iterator.hasNext())
{
String safeScanCode = iterator.next();
if (i == 0)
{
response.setSafeScanCode(safeScanCode);
response.setSafeScanCodeText(getMessage(String.format("DTECRESPONSE_SAFESCANCODE_%s",
StringUtils.trimToEmpty(safeScanCode))));
}
SafeScanWarning safeScan = new SafeScanWarning();
safeScan.setCode(safeScanCode);
safeScan.setMessage(String.format("DTECRESPONSE_SAFESCANCODE_%s", StringUtils.trimToEmpty(safeScanCode)));
safeScan.setPriority(i);
response.getSafeScanWarnings().add(safeScan);
i++;
}
}
}
【问题讨论】:
-
虽然在您的示例中,代码在您的错误中是正确的,但 if 有
&而没有&&。因此,请确保在实际代码中它是短路评估。如果已经是这种情况,那就是工具中的一个错误。 -
请注意您在代码示例上方的评论是
if (safeScanWarnings != null & safeScanWarnings.size() > 0),这是错误的(错误)