java 如何处理CompletableFuture有时可能为null

tkclm6bt  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(110)

我有这些互补的未来:

CompletableFuture<Info> futureA =
    createFutureA(multipleItems, startDate, source, context);

CompletableFuture<PPPInfo> futureB =
    createFutureB(multipleItems, startDate, source, context);

CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(futureA, futureB);

字符串
futureA调用createFutureA,可以在下面看到:

private CompletableFuture<PPPInfo> createFutureA(
      MultipleItems multipleItems,
      String startDate,
      Source source,
      Context context) {
    return CompletableFuture.supplyAsync(
        () ->
            getItemAPrice(
                Double.parseDouble(multiplePrices.getItemA().getPrice()),
                startDate,
                source,
                ITEMA,
                context));
}


在某些情况下,multiplePrices.getItemA()null,这会导致createFutureA中的NullPointerException,并且当应用程序调用combinedFuture.get()时会出现问题。如果futureA为null,我应该如何处理?

to94eoyn

to94eoyn1#

您需要在createFutureA中处理null。
如果multiplePrices.getItemA()是一个常规(同步)函数,则可以使用下面的方法。

private CompletableFuture<PPPInfo> createFutureA(
      MultipleItems multipleItems,
      String startDate,
      Source source,
      Context context) {
    Item itemA = multiplePrices.getItemA();
    if (itemA == null) {
        return CompletableFuture.completedFuture(null);
    }
    return CompletableFuture.supplyAsync(
        () ->
            getItemAPrice(
                Double.parseDouble(itemA.getPrice()),
                startDate,
                source,
                ITEMA,
                context));
}

字符串
如果multiplePrices.getItemaA()也是一个pixrc函数,返回一个可完成的future,下面的代码就可以工作。

private CompletableFuture<PPPInfo> createFutureA(
      MultipleItems multipleItems,
      String startDate,
      Source source,
      Context context) {
    return multiplePrices.getItemA()
        .thenApply(itemA => {
            if (itemA == null) {
                return null;
            }
            return getItemAPrice(
                Double.parseDouble(itemA.getPrice()),
                startDate,
                source,
                ITEMA,
                context);
        });
}

相关问题