我知道Function的apply方法同步返回一个对象,而AsyncFunction的apply异步运行并返回一个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。这是不必要的冗长。
使用标准Function
可以使代码更简洁:
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
替换Function
。也许他只是错过了重载方法。