我已经在每个示例中看到了一个示例,但是我需要确切地了解它们之间的区别,因为有时我想可以同时使用它们来获得相同的结果,所以我想知道以便选择正确的示例。一?
使用它们中的每一个有什么好处?
像这个例子一样,都可以:
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帖子以了解更多详细信息。