gpt4 book ai didi

guava - 为什么 Optional 不扩展 Supplier

转载 作者:行者123 更新时间:2023-12-01 08:06:11 24 4
gpt4 key购买 nike

我用了Supplier经常,我在看新的 Guava 10 Optional现在。

与 Supplier 相比,Optional 保证永远不会返回 null,而是会抛出 IllegalStateException。此外,它是不可变的,因此一旦创建就具有固定的已知值。与此相反,Supplier 可用于创建通过调用 get() 触发的不同或惰性值(但并非强制这样做)。

我关注了关于为什么 Optional 不应该扩展 Supplier 的讨论,我发现:

...it would not be a well-behaved Supplier

但我不明白为什么,因为供应商明确指出: No guarantees are implied by this interface .

对我来说它很合适,但我以前似乎以与最初预期不同的方式雇用供应商。有人可以向我解释为什么不应该将 Optional 用作供应商吗?

是的:将 Optional 转换为 Supplier 非常容易(此外,您可以选择改编后的 Supplier.get() 是否返回 Optional.get() 或 Optional.orNull())但是你需要一些额外的转换并且必须为每个对象创建新的对象 :-(

供应商的预期用途与我对其文档的理解之间似乎存在一些不匹配。

节食者。

最佳答案

考虑

Supplier<String> s = Optional.absent();

想想这个。您有一个包含一个方法的类型,该方法不接受任何参数,但调用该方法是程序员错误!这真的有意义吗?

您只希望 Supplierness 用于“当前”选项,但随后只需使用 Suppliers.ofInstance

关于guava - 为什么 Optional 不扩展 Supplier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7848482/

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