1 sonar 常见问题及修复思路
1.1 空指针
- 问题描述
A "NullPointerException" could be thrown; "localAddress" is nullable here.
问题代码[样例]
// 本地(服务器本机)信息
InetSocketAddress localAddress = null;
localAddress = request.getLocalAddress();
String localHostname = null;
localHostname = localAddress.getHostName();
if(StringUtils.isEmpty(localHostname)){
localHostname = "";
}
if(localAddress != null){
log.debug(String.format("[4] request-local-host-info: <host:%s, port:%s>", localHostname, localAddress.getPort()));// <host:0:0:0:0:0:0:0:1, port:18100>
}
- 修复思路
先判断或者先实例化,再访问里面的属性或者成员。
修复代码[样例]
// 本地(服务器本机)信息
InetSocketAddress localAddress = null;
String localHostname = null;
localAddress = request.getLocalAddress();
if(!ObjectUtils.isEmpty(localAddress)){
localHostname = localAddress.getHostName();
log.debug(String.format("[4] request-local-host-info: <host:%s, port:%s>", localHostname, localAddress.getPort()));// <host:0:0:0:0:0:0:0:1, port:18100>
}
if(StringUtils.isEmpty(localHostname)){
localHostname = "";
}
1.2 Optional...orElseThrow()
- 问题描述
The return value of orElseThrow must be used.
问题代码[样例]
Optional.ofNullable(object).orElseThrow(() -> {
return new BusinessException("AuthRequestParametersValidator Oject is null!");
});
- 修复思路
我假设这是一个警告(不使用orElseThrow()返回的值不应该是一个错误)。如果您希望消除该警告,请使用isPresent()代替:
if (!itemList.stream().filter(i->orderItemId.equals(i.getId())).findAny().isPresent()) {
throw new BadRequestException("12345","Item Not Found");
}
// 或只是避免使用Optional s,而是使用anyMatch()代替:
if (!itemList.stream().anyMatch(i->orderItemId.equals(i.getId()))) {
throw new BadRequestException("12345","Item Not Found");
}
修复代码[样例]
if(!Optional.ofNullable(object).isPresent()){
throw new BusinessException("AuthRequestParametersValidator Oject is null!");
}
X 参考文献
- sonar错误总结 - CSDN
- 必须使用“orElseThrow”的返回值(The return value of “orElseThrow” must be used) - 领悟书生
- The return value of "orElseThrow" must be used - stackoverflow