如何制作 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