gpt4 book ai didi

java - 在 Completable Future 中从 lambda 抛出时未报告的异常

转载 作者:行者123 更新时间:2023-12-02 03:54:03 25 4
gpt4 key购买 nike

当我编译下面的代码时,出现以下错误:

/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

最佳答案

受检异常比 Java Promise 早得多,从 Java 8 开始就不能很好地与它们配合使用。从技术上讲,BiFunction不声明抛出任何已检查的异常。因此,您传递给 thenCombine 的 findCommonMatch 也无法抛出它们。

通过继承RuntimeException取消选中NoMatchException。还要从查找方法中删除误导性的 throws 声明——它不会抛出任何东西——封装在 Promise 中的代码将抛出,而不是创建 Promise 的方法。

按照设计,Promise 中抛出的异常对于创建它们并订阅它们的代码来说是完全不可见的。相反,您通常需要使用未经检查的异常并以特定于特定 Promise 库的方式处理它们(有关其异常处理工具的详细信息,请参阅 CompletionStage 的文档)。

关于java - 在 Completable Future 中从 lambda 抛出时未报告的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35643193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com