2016-04-07 29 views
4

Mermilerin listesini birleştirmenin bir yolu var mı? Her biri istisna (varsa) yakalayacak ve bir Sonuç örneğinde tutabilecek olan ListenableFutures'ın bir listesi var. Son olarak, ListenableFutures Sonuçlarının herhangi birinin atılabilir olması durumunda bir istisna atmak istiyorum. Sorun, birden fazla atılabilirliği nasıl birleştirebileceğimizdir, çünkü başarısız olan birden fazla gelecek olabilir mi?İstisnaların bir listesi nasıl birleştirilir?

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()); 

cevap

7

"Birden çok şeyin yanlış gittiği" anlamına gelen bir istisna yoktur, ancak bir tane oluşturmanızı engelleyen hiçbir şey yoktur. İstisnalar sadece nesnelerdir ve List<Throwable> getCauses() gibi bir şeyleri de içerebilirler.

+0

Belirli bir anlamda, Java 7'nin “Throwable.getSuppressed()” işlevi aynı zamanda birden çok başarısızlığı temsil eder. –

İlgili konular