java Nullcheck检查先前在Sonar中取消引用的值的第114行的状态
对于下面的代码片段,Sonar向我抛出了一个关键的违规行为-正确性-以前未引用的状态值的空检查
有人能就我做错了什么提出建议吗
代码
public boolean isExactMacthBill(AddressResponse response) {
boolean exactMatch = false;
if (null != response && null != response.getHostResponse()) {
HostResponseDetail hostResponse = response.getHostResponse();
String addressStatus = hostResponse.getMatchStatus();
ResponseDetail status = hostResponse.getStatus();
String addressMatchCode = status.getCode();
if (null != response.getMatchedAddresses() && response.getMatchedAddresses().size() > 0 && status != null) {
if (addressStatus.equalsIgnoreCase(Constants.USPS_MATCH)
|| (addressStatus.equalsIgnoreCase(Constants.PARTIAL_MATCH)
&& addressMatchCode.equalsIgnoreCase("3SXU"))) {
exactMatch = true;
} else
exactMatch = false;
}
}
return exactMatch;
}
# 1 楼答案
实际问题在突出显示的问题后的行中-您得到:
只要拿掉那张支票,我想索纳林特会很高兴的。它是不必要的,因为如果
status
为null,那么status.getCode()
在达到该条件之前已经抛出了异常从根本上说,您需要知道
getStatus()
是否应该返回null-您是否必须显式地处理这种情况。如果您这样做了,您应该在调用status.getCode()
之前检查它,并做出相应的反应。如果您不这样做,那么调用getCode()
方法是可以的-如果您的假设不正确,您将得到一个NullPointerException
正常的结果,这可能是“世界不是我所期望的那样”场景中最合适的结果。但是,在您已经依赖于它是非空的之后,您不应该尝试“处理”它是空的# 2 楼答案
从
hostResponse.getStatus();
接收时,状态可以为空;因此,当调用行String addressMatchCode = status.getCode();
时,可能会导致空引用异常在调用方法之前,应该验证所有变量是否为null
# 3 楼答案
将
addressMatchCode
移动到if条件中,该条件为null,用于检查状态