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