如何组合一系列例外?

时间:2016-04-07 21:57:45

标签: java exception exception-handling guava

有什么方法可以合并一个扔掉的名单?我有一个ListenableFutures列表,每个都会捕获异常(如果有的话)并将其保存在Result实例中。最后,如果ListenableFutures的任何Result包含throwable,我想抛出异常。问题是如何组合多个throwable,因为可能有多个未来失败?

List<ListenableFuture<Result>> futureList = new ArrayList<>();
futureList.add(future1);
futureList.add(future2);
futureList.add(future3);

ListenableFuture<List<Result>> future = futureFutures.successfulAsList(futureList);

return Futures.transform(future, new Function<List<Result>, FinalResult>() {
      @Override
      public FinalResult apply(List<Result> resultList) {
        List<Throwable> throwableList = new ArrayList<>();
        for (Result result : resultList) {
            if (result.getThrowable() != null) {
                throwableList.add(result.getThowable());
            }
        }

        if (!throwableList.isEmpty()) {
           // Is there something like below that I can combine a list
           // of throwables and throw it?
           Throwable.propagateList(throwableList); // ?????????
        }
        .....
        return finalResult;
      }
    },
    MoreExecutors.sameThreadExecutor());

1 个答案:

答案 0 :(得分:9)

没有例外意味着“多件事出了问题”,但没有什么可以阻止你创建一个。例外只是对象,它们可以包含成员,包括List<Throwable> getCauses()