gpt4 book ai didi

java - 在单行中调用 Optional#isPresent() 被报告为未调用

转载 作者:搜寻专家 更新时间:2023-10-30 21:04:09 29 4
gpt4 key购买 nike

我运行 SonarQube 来检查我的代码,我发现了一个我不理解所报告错误的情况。

我的代码是:

private static final int BASE_ID = 100_000_000;
private boolean isValidId(Id id) {
return id.asInteger().isPresent() && id.asInteger().get() >= BASE_ID;
}

方法asInteger返回 Optional<Integer>

我从 sonarqube 得到的错误是 Call "Optional#isPresent()" before accessing the value.在返回行中。

我知道代码可以作为 if 的第二部分如果第一个为假,则不会被执行。我知道这可以用 .filter(..).isPresent() 解决但我更喜欢这种方式。

知道为什么会发生这种情况吗?

最佳答案

Sonarqube 不能保证对 id.asInteger() 的两次调用返回相同的对象,例如因为多线程可能在两次调用之间更改了 id 的值,所以它正确地说明了存在尚未经过充分测试。

首先更改代码以分配给局部变量,以确保在同一对象上调用 isPresent()get():

private boolean isValidId(Id id) {
Optional<Integer> idAsInteger = id.asInteger();
return idAsInteger.isPresent() && idAsInteger.get() >= BASE_ID;
}

关于java - 在单行中调用 Optional#isPresent() 被报告为未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53179655/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com