扩展CompletableFuture时类型不匹配

时间:2016-03-31 07:50:20

标签: java generics completable-future

我试图在CompletableFuture之后扩展thenCompose以进行handle,但是我遇到了编译错误:

Type mismatch: cannot convert from CompletableFuture(Object) to CompletableFuture(U)

这是我的代码:

public class MyCompletableFuture<T> extends CompletableFuture<T> {

    public <U> CompletableFuture<U> handleAndCompose(BiFunction<? super T, Throwable, ? extends U> fn) {
        return super.handle(fn).thenCompose(x->x);
    }

}

为了记录,我试图隐藏this reponse上使用的thenCompose,这基本上是:

.handle((x, t) -> {
    if (t != null) {
        return askPong("Ping");
    } else {
        return x;
    }
)

1 个答案:

答案 0 :(得分:3)

您的方法的签名不正确。它应该是:

public <U> CompletableFuture<U> handleAndCompose(BiFunction<? super T, Throwable, ? extends CompletableFuture<U>> fn) {
    return super.handle(fn).thenCompose(x->x);
}

请注意,给定的函数返回? extends CompletableFuture<U>而不是? extends U。您也可以接受更一般的CompletionStage而不是CompletableFuture作为参数。