java – 在Futures.transform中,使用Function和AsyncFunction有什么区别

前端之家收集整理的这篇文章主要介绍了java – 在Futures.transform中,使用Function和AsyncFunction有什么区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道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.或许他只是错过了重载方法.

猜你在找的Java相关文章