【问题标题】:Sonar Cube "null pointer exception could be thrown" : False positive?Sonarqube“可能会抛出空指针异常”:误报?
【发布时间】:2021-03-22 21:02:26
【问题描述】:

我在以下代码中遇到了声纳立方体提出的错误:

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

}

这个错误是在 log.info 语句中提出的,因为它建议在使用前检查请求是否为 NULL。但我的疑问是,如果我检查它是否为 null,如果它实际上为 null,那么我希望它去捕获异常块,无论如何它都会去,以防我不明确检查 NULL。那么它是误报吗?我该如何处理?

【问题讨论】:

    标签: java exception nullpointerexception sonarqube


    【解决方案1】:

    我不认为这是误报。 request 在您的代码中可以为 null,因此在其上调用 toString 将导致抛出空指针异常。

    如果createRequest 可以返回null,那么你应该明确地检查它而不是仅仅依赖于日志语句。类似于以下内容。

    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)
    {
    
    }
    

    在旁注中,我发现像您在 sn-p 中所做的那样捕获 Exception 通常是一个坏主意。我看不到您代码的足够上下文,无法知道您的情况是否属实,但您可能应该看看。

    【讨论】:

    • 这是由某人编写的代码,我正在尝试删除声纳报告的错误。一件事是,如果我们抛出 NULLRequestException ,那么它也会转到异常的 catch 块,如果我错误地尝试访问空请求的toString,它仍然会转到相同的异常块。我不明白为什么我应该明确检查空,除非我需要一些特定的行为以防NULLPointerException??
    • 这就是为什么捕获Exception 是个坏主意。
    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 2020-08-10
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多