有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

爪哇番石榴CheckedFuture<X,Y>映射到CheckedFuture<Z,Y>而不阻塞

我最近遇到了Guava及其异步未来API

我有一个与下面的声明类似的方法:

CheckedFuture<X, Y> update(final X entry)

在某些情况下,它可能会调用具有以下签名的方法:

CheckedFuture<Boolean, Y> delete(final X entry)

我一直在研究,但没有找到一种方法来将调用delete的结果映射到CheckedFuture<X, Y>,这是update的返回类型

有没有人能够通过调用delete(entry).checkedGet()在不阻塞整个计算的情况下完成这项工作

感谢您的帮助

注意:我知道Guava javadocs建议避免使用CheckedFutures,但这就是API的构建方式,重建它是不切实际的(这并不意味着我不期待它!)


共 (1) 个答案

  1. # 1 楼答案

    你可以使用Futures#transform

    CheckedFuture<X, Y> update(final X entry) {
        CheckedFuture<Boolean, Y> f = delete(entry);
        ListenableFuture<X> tr = Futures.transform(f, (Function<Boolean, X>) input -> entry);
        return Futures.makeChecked(tr, input -> (Y) input.getCause());
    }
    
    CheckedFuture<Boolean, Y> delete(final X entry) {
        return Futures.immediateFailedCheckedFuture(new Y());
    }