首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回CompletableFuture<Void>还是CompletableFuture<?>?

返回CompletableFuture<Void>还是CompletableFuture<?>?
EN

Stack Overflow用户
提问于 2015-12-11 22:10:47
回答 4查看 62K关注 0票数 67

我想编写一个返回CompletableFuture的异步方法。未来的唯一目的是跟踪方法何时完成,而不是其结果。返回CompletableFuture<Void>还是CompletableFuture<?>更好?是否有理由选择其中一种或另一种,还是它们是可以互换的?

  • CompletableFuture本身从它的许多方法返回CompletableFuture<Void>
  • java.nio有一个Future<Void> in AsynchronousSocketChannelFuture<Void> connect(SocketAddress remote)
  • 另一方面,java.util.concurrent类(如ExecutorServiceScheduledExecutorService )返回Future<?>:例如,使用Future<?> submit(Runnable task)

请注意,我只询问返回类型,而不是参数列表、变量声明或其他上下文。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-17 17:16:05

最好使用CompletableFuture<Void>

According to this answerSotirios Delimanolis发现,Future<?>是一个小的API缺陷。在Java6中,submit()方法在内部使用Future<Object>,因此它的返回类型被设置为Future<?>。在Java7中,实现更改为在内部使用Future<Void>,但是更改API为时已晚,因此返回值保留为Future<?>

更新的Java使用Future<Void>CompletableFuture<Void>。这些都是我们应该学习的例子。

票数 30
EN

Stack Overflow用户

发布于 2015-12-11 22:46:00

返回CompletableFuture还是CompletableFuture更好? 是否有理由选择其中一种或另一种,还是它们是可以互换的?

有三种情况下的代码可能会影响:

  • 运行时-泛型对其没有任何影响。
  • 编译--我无法想象某些方法会接受Future<Void>但不接受Future<?>的情况。
  • 开发--如果Future的结果没有任何意义,那么通过声明向用户说明这一点是一个很好的实践。

因此,Future<Void>更可取。

票数 18
EN

Stack Overflow用户

发布于 2015-12-11 22:55:08

查看CompletableFuture API,您会发现CompletableFuture<Void>是与副作用类似的方法,无法获得结果(因为它不存在),例如:

代码语言:javascript
复制
CompletableFuture.runAsync(Runnable runnable);

在这里返回一个CompletableFuture<Object>会让人感到困惑,因为没有结果,我们只关心完成。取ConsumersRunnables的方法返回CompletableFuture<Void>,ex:thenAcceptthenAcceptAsyncConsumerRunnable一般用于副作用。

Void的另一个用例是当您真的不知道结果时。例如:CompletableFuture.allOf,传递的列表可能是一个来自Runnable的CompletableFuture,因此我们无法获得结果。

尽管如此,只有当您没有其他选项时,CompletableFuture<Void>才是好的,如果您可以返回结果,那么请执行它,如果调用方不感兴趣,可以选择放弃。您说您只对完成感兴趣,那么是的,CompletableFuture<Void>将完成这项工作,但是如果您的API用户知道CompletableFuture<T>是一个选项,并且您代表他们决定他们永远不需要结果的话,他们会讨厌您。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34233375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档