我有一个看起来类似于的代码
public void myMethod(){
List<CompletableFuture<Void>> futures = new ArrayList<>();
//getQuestion, getAnswer, both returns a CompletableFuture<Void>
futures.add(getQuestion());
futures.add(getAnswer());
// make sure all the futures are executed.
CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).join();
}
在执行myMethod()*之后,我如何测试Futures数组的大小是否为2的任何指针*
最佳答案
测试数组的大小没有意义。在Java中,数组永远不会更改其大小,这也适用于futures.toArray(…)
返回的数组。如果数组大小错误,则表示特定集合的toArray
实现已经返回了大小错误的数组。
您可以使用futures.toArray(new CompletableFuture[0]))
使代码更健壮,让toArray
实现创建一个合适大小的数组,而不是传递预定义大小的数组。正如this article中所述,实际上它甚至更快,这与古老的神话相反。
当然,对于固定数量的期货,根本不需要在集合和数组之间进行转换。你可以用
public void myMethod() {
CompletableFuture<?>[] futures = { getQuestion(), getAnswer() };
// make sure all the futures are executed.
CompletableFuture.allOf(futures).join();
}
CompletableFuture.allOf
的合同将返回将在所有期货均完成后完成的期货,并且join()
将无条件等待该完成。没有什么需要检查的。如果将来有任何异常完成,则join()
方法将引发异常,要么是将原始异常作为原因的CompletionException
,要么是由于取消导致异常完成时的CancellationException
。