假设API方法返回ListenableFuture<T>,并且返回值实现为SettableFuture<T>。有没有一种方法可以返回不能被返回到SettableFuture并由行为不端的客户端完成的“ ListenableFuture”?

因此,为ListenableFuture的只读视图。与使用.unmodifiableCollection包装集合类似。

最佳答案

最简单的方法可能是:

return Futures.transform(future, x -> x);

请注意,就人们可以cancel而言,未来仍然是“可写的”。如果您想阻止用户甚至取消原定的未来-我认为您对此并不在意,但是由于您说的是“只读”,因此无论如何我都希望将其提起-您可以使用:

return Futures.nonCancellationPropagating(future);

09-27 21:09