gpt4 book ai didi

java - Guava 的 Optional.or() 的预期行为是什么?

转载 作者:行者123 更新时间:2023-12-03 19:42:21 25 4
gpt4 key购买 nike

我链接可选值的方法与我想象的不一样 from reading the docs.

假设所有function_n返回 Optional<Foo>

public Foo getFooFromService() {
return this.function_1()
.or(this.function_2())
.or(this.function_3())
.or(DEFAULT_VAL)

我认为对于上面的代码,如果function_1返回一个非缺失的 Optional,然后程序将返回它的内部值(.get() 的结果)并且不对 function_2 做任何进一步的计算。和 function_3

我的程序肯定会进行额外的计算

最佳答案

为了从getFooFromService返回一个值, function_1和三个 or s 必须被执行,这意味着它们的参数将被评估。 function_2function_3将在任何情况下运行。

可能适合您的选项是采用 Supplier 的重载版本这意味着延迟评估。

public abstract T or(Supplier<? extends T> supplier)

更新

这是一个@Beta方法(可能会发生变化),我发现它完全没用。它解决了 Supplier<? extend T>T ,从而破坏了建立链条的机会。基本上,您无法重写您的代码片段以使用此方法。

更新 1

但您可以切换到 Java 的 Optional并写

return function_1()
.orElseGet(() -> function_2()
.orElseGet(() -> function_3()
.orElse(DEFAULT_VAL)));

这不是那么富有表现力,但按预期工作。

我的格式很糟糕,但你明白了 ;)

关于java - Guava 的 Optional.or() 的预期行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55012769/

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