当前位置: 首页 > 知识库问答 >
问题:

在可完成的将来从lambda抛出时出现未报告的异常

段干玺
2023-03-14

当我编译下面的代码时,我得到以下错误:

/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

共有1个答案

颜杰
2023-03-14

检查异常比Javapromise的要早得多,从Java 8开始就不能很好地使用它们了。从技术上讲,BiFunction并不声明抛出任何检查过的异常。因此,您传递给< code>thenCombine的< code > findconmatch 也不能抛出它们。

通过继承<code>RuntimeException

Promise中引发的异常在设计上对创建它们并订阅它们的代码完全不可见。相反,通常期望您使用未检查的异常,并以特定于promise库的方式处理它们(有关其异常处理功能的详细信息,请参阅CompletionStage文档)。

 类似资料:
  • 问题内容: 当我编译下面的代码时,出现以下错误: 代码: 我已经宣布要抛出它。我想念什么? 完整代码在https://github.com/spakai/composite_indexes中 问题答案: 从Java 8开始,检查异常比Java承诺的要早得多,并且不能与它们很好地配合使用。从技术上讲,BiFunction不会声明抛出任何检查异常。因此,您传递给的,也不能将其抛出。 请通过继承选中。还

  • 我正在开发一个微服务应用程序,在服务布局中,我想使用可完成的未来.runAsync()调用。问题是当我想抛出异常时,我有自己的处理程序异常,但是当它在 CompletedFuture 中的捕获块中生成时,我无法捕获错误,如下所示: 控制器: 服务: 客户: 错误处理程序: 我不可能使用正确的形式。知道如何在supplyAsync块中抛出异常吗?

  • 在测试中,我使用的是mockobject: 我试图验证其方法的使用: 但它抛出以下异常: 组织。莫基托。例外情况。滥用。UnfinishedVerificationException:此处缺少验证(模拟)的方法调用: 这一行的例外点是: setMaxRows接受一个int。 当我注释掉这一行时,测试成功了。调试程序时,我可以看到正在设置的setMaxRows方法: BrandLabels是一个Li

  • 我们使用带有Log4j的springaop来登录我们的应用程序。我在应用程序中实现了@Before、@After、@posterhrowing建议。但我面临以下问题: 当任何异常在catch块中被捕获时,它不会调用@afterhrowing通知来打印错误堆栈跟踪。 我想为catch块中捕获的异常打印“错误堆栈跟踪”。意味着无论何时在try块中发生任何异常并被catch捕获,都应该调用一些建议来打印

  • 问题内容: 我有以下代码: 抛出一个。我不想在这里处理此问题,但是将异常从抛出给的调用者。 问题答案: 您的代码建议您稍后以相同的方法使用异步操作的结果,因此无论如何都必须进行处理,因此一种处理方法是 在的异步处理中抛出的所有异常都将在调用时包装为一个,除了我们已经包装在一个。 当重新引发的原因时,我们可能会遇到未检查的异常,即or的子类或我们的自定义检查的异常。上面的代码通过多次捕获来处理所有这

  • 当抛出未捕获的异常时,任何Amazon AWS Lambda Java函数需要不合理的长时间才能完成,这正常吗?请注意,这是一个关于Java中Amazon Lambdas的一般性问题,因为我正在以一种非常通用的方式测试这个问题,使用一个非常简单的bare bones函数。 例如,考虑下面的函数,它验证PIN。如果PIN有效,则返回文本:。否则,将抛出: 要测试上述代码: > 对于有效引脚,使用作为