返回ComplentableFuture<Void>还是ComppletableFuture<?>?

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

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


答案 1

最好使用 。CompletableFuture<Void>

根据Sotirios Delimanolis发现的这个答案,是一个很小的API缺陷。在 Java 6 中,该方法在内部使用 a,因此其返回类型设置为 。在Java 7中,实现更改为内部使用,但为时已晚,无法更改API,因此返回值保持为。Future<?>submit()Future<Object>Future<?>Future<Void>Future<?>

较新的 Java API 使用 和 。这些是我们应该效仿的榜样。Future<Void>CompletableFuture<Void>


答案 2

返回CompletableFuture<Void>还是ComppletableFuture<会更好?>

是否有理由偏爱其中一个,或者它们可以互换吗?

代码可能会影响三种上下文:

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

所以更可取。Future<Void>