2016-04-07 3 views
4

throwableのリストを組み合わせる方法はありますか?私はListenableFuturesのリストを持っています。ListenableFuturesのリストは、例外があればすべて取得し、Resultインスタンスに保持します。最後に、ListenableFuturesのResultのどれかに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()); 

答えて

7

「複数のものが間違っていた」という意味は例外ではありませんが、作成することを妨げるものは何もありません。例外は単なるオブジェクトであり、メンバーにはList<Throwable> getCauses()などがあります。

+0

ある意味では、Java 7の 'Throwable.getSuppressed()'は複数の失敗を表します –

関連する問題