我已经在每个示例中看到了一个示例,但是我需要确切地了解它们之间的区别,因为有时我想可以同时使用它们来获得相同的结果,所以我想知道以便选择正确的示例。一?

使用它们中的每一个有什么好处?

像这个例子一样,都可以:

public CompletionStage<Result> getNextQueryUUID() {
    return CompletableFuture.supplyAsync(() -> {
        String nextId = dbRequestService.getNextRequestQueryUUID();
        return ok(nextId);
    }, executor);
}


public CompletableFuture<Result> getNextQueryUUID() {
    return CompletableFuture.supplyAsync(() -> {
        String nextId = dbRequestService.getNextRequestQueryUUID();
        return ok(nextId);
    }, executor);
}

最佳答案

CompletionStage<T> 是一个接口(interface), CompletableFuture<T> 是当前唯一的实现类。通过在Javadoc中查找CompletionStage<T>,您会注意到它提供了获取一个CompletionStage<T>并将其转换为另一个CompletionStage<T>的方法。但是,CompletionStage<T>返回的值实际上本身就是CompletabeFuture<T>对象。
因此,使用CompletabeFuture<T>与使用CompletionStage<T>是一样的事情,但是后者可以用作将来可能的新类的基础接口(interface),并且可以用作许多降序类型的目标类型,就像我们倾向于使用List<Integer> integerList = new ArrayList<>();而不是ArrayList<Integer> integerList = new ArrayList<>();您可以阅读introduction to CompletionStage and CompletableFuture帖子以了解更多详细信息。

10-04 20:24