繁体   English   中英

在CompletableFuture中执行不同签名的方法

[英]Execute a method of different signature in CompletableFuture

从下面的代码中,我想在foo1完成foo2之后执行foo3 foo1的方法签名不能更改。 一种方法是将foo3移至foo2 ,但这将打破关注点分离。

@Override
CompletableFuture<Integer> foo1(String str) {
    return CompletableFuture.supplyAsync(() -> foo2(str));
}

Integer foo2(String str) {
    return 0;
}

void foo3(String str) {
    System.out.println("Done");
}

假设您只想在foo2之后调用foo3并返回foo2输出,那么您可以这样做:

return CompletableFuture.supplyAsync(() -> {
                Integer r = foo2(str);
                foo3("testing");
                return r;
            }
    );

你的意思是像

foo1(str).thenRun(() -> foo3(str);

因为您似乎对foo1的结果不感兴趣。

如果foo3调用应该是foo1一部分,那么这是一种方法:

CompletableFuture<Integer> foo1(String str) {
    return CompletableFuture.supplyAsync(() -> foo2(str))
            .thenApply(foo2Result -> {
                        foo3(str);
                        return foo2Result;
                    }
            );
}

或者,如果要调用它,则在调用foo1地方:

foo1(str).thenApply(result -> {
            foo3(str);
            return result;
        }
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM