SonarQube 8.1.0 在访问值之前抱怨调用“Optional#isPresent()”
Posted
技术标签:
【中文标题】SonarQube 8.1.0 在访问值之前抱怨调用“Optional#isPresent()”【英文标题】:SonarQube 8.1.0 is complaining about Call "Optional#isPresent()" before accessing the value 【发布时间】:2020-04-17 12:44:09 【问题描述】:我收到错误消息:“在访问值之前调用“Optional#isPresent()””
但正如您在图片中看到的那样,在该行之前有一个 isPresent() 检查。
这是 SonarQube 的错误吗?
-
【问题讨论】:
@amerOptional
没有 getId()
方法。
严格来说,当您调用component.getId()
第二次 时,您不能假设它会给出与您调用isPresent()
相同的Optional
实例.我无法检查这是否解决了它,因为我的并没有提出问题
如果@ernest_k 的陈述成立,应该可以通过提取一些Optional<String> id = component.getId();
来预防
@amer 如果您想要一个替代值,那么可以。但是,如果您想要分支控制流,那么这是不可能的。
另一方面,在类中定义 Optional
类型属性是一种不好的做法。我想知道 getId
是否只是一个吸气剂,为什么 Sonar 也不会警告你。
【参考方案1】:
ernest_k 是对的:(谢谢!)
严格来说,当你第二次调用 component.getId() 时间,你不能假设它会给出相同的 Optional 实例 你打电话给 isPresent() 。
所以我把代码改成:
Optional<String> optionalId = component.getId();
if (optionalId.isPresent())
String id = optionalId.get();
// ...
【讨论】:
以上是关于SonarQube 8.1.0 在访问值之前抱怨调用“Optional#isPresent()”的主要内容,如果未能解决你的问题,请参考以下文章