我知道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。也许他只是错过了重载方法。

09-10 15:52