[英]CompletionStage, CompletableFuture Void - what to return?
[英]What is the difference between 'CompletionStage' and 'CompletableFuture'
我在他们每个人中都看到了一个例子,但我需要确切地知道 deep 有什么不同,因为有时我认为我可以同时使用它们来获得相同的结果,所以我想知道以便我可以选择正确的一?
分别使用它们有什么好处?
像这个例子一样都有效:
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);
}
此示例在
Play framework
运行。
CompletionStage<T>
是一个接口,其中CompletableFuture<T>
是当前唯一的实现类。 通过查看CompletionStage<T>
的 javadoc,您会注意到它提供了用于获取一个CompletionStage<T>
并将其转换为另一个CompletionStage<T>
。 但是, CompletionStage<T>
返回的值实际上是CompletabeFuture<T>
对象。
因此,使用CompletabeFuture<T>
与使用CompletionStage<T>
有点相同,但后者可以用作将来可能的新类的基本接口,以及作为许多降序类型的目标类型,就像我们一样倾向于做List<Integer> integerList = new ArrayList<>();
而不是ArrayList<Integer> integerList = new ArrayList<>();
CompletableFuture
是一个CompletionStage
。 然而,正如它的名字所暗示的那样,
complete
或completeExceptionally
。Future
:您可以使用get
方法等来获取结果。 恕我直言,在大多数 API 中,就像在您的示例中一样,您应该使用CompletionStage
,因为
complete
之类的方法。Future
提供的get
类的阻塞调用。一个是接口,另一个是类。 通常你返回接口而不是实现,但我怀疑这里的情况。 返回CompletableFuture
对我来说更有意义。
除非您当然使用该接口的其他一些实现,例如 Spring 的DelegatingCompletableFuture
,但从您的示例来看,您不是。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.