簡體   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