[英]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.