加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在Futures.transform中,使用Function和AsyncFunction有

发布时间:2020-12-15 00:09:40 所属栏目:Java 来源:网络整理
导读:我知道Function的apply方法同步返回一个对象,AsyncFunction的应用程序异步运行并返回一个Future. 你能举个例子说明何时选择什么. 我看到的一个代码片段看起来像这样: Futures.transform(someFuture,new AsyncFunctionA,B() { public B apply(A a) { if (a !
我知道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.或许他只是错过了重载方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读