【问题标题】:How do I solve SonarCube issue: call is marked "javax.annotation.Nonnull" but null could be passed如何解决 SonarCube 问题:调用标记为“javax.annotation.Nonnull”但可以传递 null
【发布时间】:2022-11-21 13:16:27
【问题描述】:

我从下面的代码中得到 SonarQube 错误:getProducts() 调用中的参数 1 和 2 标记为“javax.annotation.Nonnull”,但可以传递 null。

Summary summaryForOrg = null;
PoolSummary poolSummary = null;
summaryForOrg = getSummary(); //GET Api call
poolSummary = getPoolSummary(); //GET Api call

 // I get an error from SonarCube for parameter 1 and 2 below
products = SummaryUtils.getProducts(summaryForOrg, poolSummary); 

下面是 getProducts 方法的签名:

公共产品摘要 getProducts( @Nonnull 总结总结, @Nonnull PoolSummary poolSummary, ) { .... }

【问题讨论】:

  • 我不确定 Sonar 如何准确分析空值传播,但 1) 看起来它只是可以看到对变量的空值赋值(如果合并变量声明和赋值并在两种情况下丢弃 = null 会怎样?); 2) get-methods 是用 @Nullable 注释的吗? 3)一旦你用@Nonnull注释变量,它会做什么? 4)尝试将变量包装在Objects.requireNonNull中(如果可能,或者更好地分析空检查警告更深入); 5)抑制警告(不得已的办法,不推荐)。

标签: java sonarqube


【解决方案1】:

在您的 getProduct 方法中,两个参数都标记为 nonNull,并且在您的代码中,您将两个参数都初始化为 null。有可能出现 NullPointerException。因此,您遇到了这个声纳问题。

可能的解决方案是。您可以将这两个变量初始化为空字符串而不是 null。它可能会解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 2012-08-21
    • 2020-10-02
    • 2016-07-30
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2019-06-18
    相关资源
    最近更新 更多