如何制作 SettableFuture 的防御性副本?或者通常是一个 ListenableFuture?
How to make a defensive copy of a SettableFuture? Or generally a ListenableFuture?
喜欢CompletableFuture.copy()
。不确定它对其他 ListenableFuture
是否有意义,但至少对 SettableFuture
而言,我不希望未经授权的客户端设置未来。
我正在考虑使用 Futures.transform()
,它似乎创建了一个链式 ListenableFuture
。
transform(x -> x)
是一个很好的解决方案——听起来与 copy()
.
等效
我能想到的唯一警告是,对两个 Future
对象的更新可能会竞争:原始 Future
可能会完成,而另一个 Future
被取消,在这种情况下,您的 "copy" 状态不同。 (同样,可以观察到一个 Future
已完成,而另一个仍未完成。)再一次,这听起来像是 copy()
的情况。如果您担心,您可以创建一个 ForwardingListenableFuture
来代替原来的 Future
。
喜欢CompletableFuture.copy()
。不确定它对其他 ListenableFuture
是否有意义,但至少对 SettableFuture
而言,我不希望未经授权的客户端设置未来。
我正在考虑使用 Futures.transform()
,它似乎创建了一个链式 ListenableFuture
。
transform(x -> x)
是一个很好的解决方案——听起来与 copy()
.
我能想到的唯一警告是,对两个 Future
对象的更新可能会竞争:原始 Future
可能会完成,而另一个 Future
被取消,在这种情况下,您的 "copy" 状态不同。 (同样,可以观察到一个 Future
已完成,而另一个仍未完成。)再一次,这听起来像是 copy()
的情况。如果您担心,您可以创建一个 ForwardingListenableFuture
来代替原来的 Future
。