首页 > 解决方案 > 如何制作 SettableFuture 的防御性副本?或者通常是 ListenableFuture?

问题描述

喜欢CompletableFuture.copy()。不确定它是否对其他ListenableFutures 有意义,但至少对于 s,SettableFuture我不希望未经授权的客户设定未来。

我正在考虑使用Futures.transform(),这似乎创建了一个链式ListenableFuture.

标签: guava

解决方案


transform(x -> x)是一个很好的解决方案——它听起来与copy().

我能想到的唯一警告是,这两个Future对象的更新可能会竞争:原始对象可能Future会完成,而另一个对象可能Future会被取消,在这种情况下,您有一个具有不同状态的“副本”。(类似地,可以观察到一个Future已完成,而另一个仍处于未决状态。)同样,这听起来也是 的情况copy()。如果它与您有关,您可以创建一个ForwardingListenableFuture包装原始文件的Future文件。


推荐阅读