从下面的代码中,我想foo3在. 的方法签名无法更改。一种方法是进入,但这会破坏关注点分离。foo2foo1foo1foo3foo2@OverrideCompletableFuture<Integer> foo1(String str) { return CompletableFuture.supplyAsync(() -> foo2(str));}Integer foo2(String str) { return 0;}void foo3(String str) { System.out.println("Done");}
3 回答

拉莫斯之舞
TA贡献1820条经验 获得超10个赞
假设您只想调用foo3afterfoo2并返回foo2输出,那么您可以这样做:
return CompletableFuture.supplyAsync(() -> {
Integer r = foo2(str);
foo3("testing");
return r;
}
);

慕婉清6462132
TA贡献1804条经验 获得超2个赞
如果foo3call 应该是 的一部分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;
}
);
添加回答
举报
0/150
提交
取消