java for循环,循环外定义了一个 CompletableFuture<Integer>[] futuresDa = new CompletableFuture[floorIds.size()]; 在for循环内 循环调用异步方法,该异步方法返回 CompletableFuture<List<Map<String,Object>>> addDaXiang,但是调用 CompletableFuture.allOf(futuresDa).join();时, CompletableFuture报空指针
时间: 2023-10-17 10:33:42 浏览: 71
根据你的描述,可能是在异步方法 `addDaXiang` 的实现中,没有成功地将结果放入 `CompletableFuture` 对象中。这可能会导致在 `CompletableFuture.allOf(futuresDa)` 方法中出现空指针异常。
为了解决这个问题,你可以在异步方法 `addDaXiang` 的实现中,确保将方法返回的结果放入 `CompletableFuture` 对象中。具体来说,你可以在 `addDaXiang` 方法内部使用 `CompletableFuture.complete(result)` 或者 `CompletableFuture.completeExceptionally(throwable)` 来完成 `CompletableFuture` 对象的结果或异常。例如:
```java
for (int i = 0; i < floorIds.size(); i++) {
int floorId = floorIds.get(i);
CompletableFuture<List<Map<String,Object>>> addDaXiangFuture = addDaXiang(floorId);
futuresDa[i] = addDaXiangFuture;
addDaXiangFuture.whenComplete((result, throwable) -> {
if (throwable != null) {
// 在异步方法执行出现异常时,将异常放入 CompletableFuture 对象中
futuresDa[i].completeExceptionally(throwable);
} else {
// 异步方法执行成功时,将结果放入 CompletableFuture 对象中
futuresDa[i].complete(result);
}
});
}
CompletableFuture.allOf(futuresDa).join();
```
在上面的代码中,我们使用了 `whenComplete` 方法来处理异步方法的结果或异常,并将其放入对应的 `CompletableFuture` 对象中。这样,在调用 `CompletableFuture.allOf(futuresDa)` 方法时,就不会出现空指针异常了。
阅读全文