【问题标题】:SonarQube 8.1.0 is complaining about Call "Optional#isPresent()" before accessing the valueSonarQube 8.1.0 在访问值之前抱怨调用“Optional#isPresent()”
【发布时间】:2020-04-17 12:44:09
【问题描述】:

我收到错误消息:“在访问值之前调用“Optional#isPresent()””

但正如您在图片中看到的那样,在该行之前有一个 isPresent() 检查。

这是 SonarQube 的错误吗?

-

【问题讨论】:

  • @amer Optional 没有 getId() 方法。
  • 严格来说,当您调用component.getId() 第二次 时,您不能假设它会给出与您调用isPresent() 相同的Optional 实例.我无法检查这是否解决了它,因为我的并没有提出问题
  • 如果@ernest_k 的陈述成立,应该可以通过提取一些Optional<String> id = component.getId(); 来预防
  • @amer 如果您想要一个替代值,那么可以。但是,如果您想要分支控制流,那么这是不可能的。
  • 另一方面,在类中定义 Optional 类型属性是一种不好的做法。我想知道 getId 是否只是一个吸气剂,为什么 Sonar 也不会警告你。

标签: java sonarqube optional


【解决方案1】:

ernest_k 是对的:(谢谢!)

严格来说,当你第二次调用 component.getId() 时间,你不能假设它会给出相同的 Optional 实例 你打电话给 isPresent() 。

所以我把代码改成:

Optional<String> optionalId = component.getId();
if (optionalId.isPresent()) {
     String id = optionalId.get();
     // ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2019-04-10
    • 2022-01-17
    • 2020-02-24
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    相关资源
    最近更新 更多