如何制作SettableFuture的防御副本?还是一般来说是ListenableFuture?

时间:2018-11-17 11:13:40

标签: guava

类似于CompletableFuture.copy()。不确定是否对其他ListenableFuture有意义,但至少对SettableFuture而言,我不希望未经授权的客户来设定未来。

我正在考虑使用Futures.transform(),它似乎可以创建链接的ListenableFuture

1 个答案:

答案 0 :(得分:1)

transform(x -> x)是一个很好的解决方案-听起来与copy()等效。

我唯一想到的警告是,有可能对两个Future对象进行更新竞争:原始Future可能会完成而另一个Future可能会完成已取消,在这种情况下,您拥有状态不同的“副本”。 (类似地,有可能观察到一个Future已完成而另一个仍在等待中。)同样,这听起来像copy()也是这样。如果您有问题,可以创建一个ForwardingListenableFuture来包装原始的Future