2016-02-26 5 views
0

Когда я скомпилировать код ниже, я получаю следующее сообщение об ошибке:незарегистрированное исключение при метании из лямбда в Completable будущего

/home/prakashs/composite_indexes/src/main/java/com/spakai/composite/TwoKeyLookup.java:22: error: unreported exception NoMatchException; must be caught or declared to be thrown 
     CompletableFuture<Set<V>> result = calling.thenCombine(called, (s1, s2) -> findCommonMatch(s1, s2)); 

Код:

public CompletableFuture<Set<V>> lookup(K callingNumber, K calledNumber) throws NoMatchException { 
     CompletableFuture<Set<V>> calling = callingNumberIndex.exactMatch(callingNumber); 
     CompletableFuture<Set<V>> called = calledNumberIndex.exactMatch(calledNumber); 
     CompletableFuture<Set<V>> result = calling.thenCombine(called, (s1, s2) -> findCommonMatch(s1, s2)); 
     return result; 
    } 

    public Set<V> findCommonMatch(Set<V> s1, Set<V> s2) throws NoMatchException { 
     Set<V> intersection = new HashSet<V>(s1); 
     intersection.retainAll(s2); 

     if (intersection.isEmpty()) { 
      throw new NoMatchException("No match found"); 
     } 

     return intersection; 
    } 

Я уже объявляя ее быть брошенным. Что мне не хватает?

Полный код находится в https://github.com/spakai/composite_indexes

ответ

2

проверяемые исключения намного старше, чем Java обещания и не хорошо работать с ними, как в Java 8. С технической точки зрения, BiFunction не объявляет бросать любые проверяемое исключение. Таким образом, ваш findCommonMatch, который вы переходите на thenCombine, тоже не может их бросить.

NoMatchException не отмечены наследование с RuntimeException. Также удалите вводящее в заблуждение объявление throws из метода поиска - он ничего не бросает - код, будучи инкапсулированным в рамках обещания, собирается бросить, а не обещать создание метода.

Исключения, брошенные в рамках обещаний, являются полностью незаметными для кода, которые создают их и подписываются на них. Вместо этого вы обычно должны использовать исключенные исключения и обрабатывать их определенным образом для конкретной библиотеки обещаний (см. Документацию CompletionStage для получения подробных сведений об ее средствах обработки исключений).

Смежные вопросы