我知道Function的apply方法同步返回一个对象,AsyncFunction的应用程序异步运行并返回一个Future.
你能举个例子说明何时选择什么.
我看到的一个代码片段看起来像这样:
Futures.transform(someFuture,new AsyncFunction<A,B>() { public B apply(A a) { if (a != null) { return Futures.immediateFuture(a.getData()) } else { return Futures.immediateFailedFuture(checkException(()); } }); });
由于AsyncFunction内的值是立即返回的,为什么需要AsyncFunction呢?或者这只是我遇到的一个不好的例子?
解决方法
您找到的代码片段是一个错误的示例,因为它使用AsyncFunction来同步计算某些内容.这是不必要的冗长.
Futures.transform(someFuture,new Function<A,B>() { public B apply(A a) { if (a != null) { return a.getData(); } else { throw checkException(); } }); });
当转换A到B的代码是异步时,您应该使用AsyncFunction.在您的示例中,代码可能最初是异步的,后来由程序员更改为使用Futures.immediateFuture()/ Futures.immediateFailedFuture(),该程序员没有用函数替换AsyncFunction.或许他只是错过了重载方法.