gpt4 book ai didi

java - 为什么 Idea lint 警告缺少 `isPresent()` 检查 `orElseGet` ?

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:01 25 4
gpt4 key购买 nike

假设我不知道一个 Optional 是否为空,或者两者是否都存在。在后一种情况下,我总是希望 a 而不是 b:

final Optional<String> a = Optional.of("1");
final Optional<String> b = Optional.empty();
if (a.isPresent() || b.isPresent()) {
// prefer a over b
Integer result = a
.map(s -> s + "0")
.map(Integer::parseInt)
.orElseGet(() -> Integer.parseInt(b.get())); // <-- warning for b.get()
System.out.println(result);
}

在我的真实代码中,Idea 在这一点上警告我:

'Optional.get()' without 'isPresent()' check.

这是为什么呢?我会事先检查 ab 是否存在。此外,此代码按预期工作,输出为 10。如果我输入 b = Optional.of("2"),输出仍然是 10,因为我更喜欢 a。如果我随后输入 a = Optional.empty(),输出将如预期的那样为 2

是我做错了什么,还是 Idea 的 linter 有问题?

最佳答案

这里的想法很困惑,它的内部规则可能假设在 same 可选链接中检查 isPresent

由于 (a.isPresent() || b.isPresent()),这显然位于 Optional 检查自身之外;由于这些检查,无法判断没有办法在空的可选 b 上调用 orElseGet...

关于java - 为什么 Idea lint 警告缺少 `isPresent()` 检查 `orElseGet` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44661939/

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