SonarCube“可能引发空指针异常”:假阳性?

nhjlsmyf  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(525)

sonar cube在以下代码中引发了一个bug:

private request = null;
try
{
request = createRequest(); // create Request
log.info(" Request created with details "+request.toString());
}
catch(...)
{
}
catch(Exception e)
{

}

这个bug在log.info语句中出现,因为它建议在使用前检查请求是否为null。但我的疑问是,如果我检查它是否为null,并且如果它实际上为null,那么我希望它转到catch exception块,不管怎样,如果我没有显式地检查null,它将转到catch exception块。那是假阳性吗?我怎么处理?

insrf1ej

insrf1ej1#

我不认为这是假阳性。 request 在你的代码中可以为空所以调用 toString 它将导致抛出空指针异常。
如果 createRequest 可以返回null,那么您应该显式地检查它,而不仅仅依赖于log语句。像下面这样。

private request = null;
try
{
request = createRequest(); // create Request
if ( null == request ){
    throw new NullRequestException();
}
log.info(" Request created with details "+request.toString());
}
catch(...)
{
}
catch(Exception e)
{

}

顺便说一句,我觉得很吸引人 Exception 就像你在代码片段中所做的那样,通常是个坏主意。我看不到足够多的代码上下文,因此无法知道您的情况是否属实,但这是您可能应该查看的内容。

相关问题