guava - 如何制作 SettableFuture 的防御性副本?或者通常是 ListenableFuture?
问题描述
喜欢CompletableFuture.copy()
。不确定它是否对其他ListenableFuture
s 有意义,但至少对于 s,SettableFuture
我不希望未经授权的客户设定未来。
我正在考虑使用Futures.transform()
,这似乎创建了一个链式ListenableFuture
.
解决方案
transform(x -> x)
是一个很好的解决方案——它听起来与copy()
.
我能想到的唯一警告是,这两个Future
对象的更新可能会竞争:原始对象可能Future
会完成,而另一个对象可能Future
会被取消,在这种情况下,您有一个具有不同状态的“副本”。(类似地,可以观察到一个Future
已完成,而另一个仍处于未决状态。)同样,这听起来也是 的情况copy()
。如果它与您有关,您可以创建一个ForwardingListenableFuture
包装原始文件的Future
文件。
推荐阅读
- json - 错误:'列表
' 不是类型 'Map 的子类型 ' - material-ui - [KeyboardDatePicker]:如何在材料 UI/pickers 中增加 KeyboardDatePicker 的字体大小反应
- android - 如何在 Android 中通过麦克风实现音乐可视化?
- javascript - 4.5.12 vue-cli 需要 vue@2.6.12 吗?
- java - 如何从列表中创建一个长号码
? - oracle - 用于分析和报告的建模数据
- sql - 应用 where 子句时不显示间隔
- c++ - 这个 sprintf 的 C++ 等价物是什么?
- java - Android 应用程序在空对象引用上不断崩溃“android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()”
- c++ - cppreferece中shared_ptr构造函数的定义是否错误?