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

Java8 Stream. orElseThrow未报告的异常错误

薛元忠
2023-03-14

我试图找出为什么在<代码>中会发生特定行为。orElseThrow在Java流中。此代码块

private SomeContainer getSomeContainerFromList(SomeContainerList containerList, String containerId) {

   return containerList.stream()
           .filter(specificContainer -> specificContainer.getId().equals(containerId))
           .findAny()
           .orElseThrow(() -> {
               String message = "some special failure message";
               log.error(message);
               throw new CustomInternalException(message)});
}

导致此错误:未报告的异常X;必须捕获或声明为抛出

我不想报告异常,因为这会导致我将其添加到与此交互的所有其他方法中。

但是,当我删除花括号lambda表达式时,只留下要抛出的新异常,如下所示:

private SomeContainer getSomeContainerFromList(SomeContainerList containerList, String containerId) {

   return containerList.stream()
           .filter(specificContainer -> specificContainer.getId().equals(containerId))
           .findAny()
           .orElseThrow(() -> new CustomInternalException("some special failure message"));
}

它编译得很好,不再需要报告异常,尽管我无法记录消息或执行任何其他逻辑。ORELSETROW语句。

为什么会发生这种情况?我看到过一个类似的问题,它解释了这可能是JDK中的一个bug,但我想确保在我的情况下是这样的。


共有1个答案

秦德海
2023-03-14

不要抛出异常,返回它:

.orElseThrow(() -> {
    String message = "some special failure message";
    log.error(message);
    // change “throw” to “return”:
    return new CustomInternalException(message)});

. orElseThrow()接受供应商

 类似资料:
  • 问题内容: 在学习Java时,我经常会偶然发现此错误。它是这样的: 只是一个例子,我见过很多不同的例子。在这种情况下,导致错误的代码是: 一旦将语句放入块中,错误总是消失并且代码编译并成功运行。有时对我来说已经足够了,但有时却不行。 首先,我从中学习的示例并不总是使用,但是显然应该可以使用。 更重要的是,有时当我将整个代码放在中时,它根本无法工作。例如在这种情况下,我需要; 在区块中;但如果上述本

  • 问题内容: 我收到了一个未报告的异常;必须在下面的fill方法中被捕获或声明为抛出错误。从我读过的类似文章中,我假设错误是由read方法引发Exception引发的,但我无法修复。 填充定义为: 问题答案: 您的call ,它被声明为throw ,但是您既没有捕获witin异常,也没有声明它可能被抛出。 最简单的解决方法是将的签名更改为: 我也强烈建议 不要 关闭中的读者。通常,获取资源的相同代码

  • 问题内容: 我想打开一个文件并对其进行扫描以打印其令牌,但出现错误:未报告的异常java.io.FileNotFoundException; 必须被捕获或声明为抛出Scanner stdin = new Scanner(file1);该文件与正确的名称位于同一文件夹中。 问题答案: 您正在使用的构造函数将引发FileNotFoundException,您必须在编译时捕获该异常。 上面的表示法(在括

  • 然而,试图使用jsp与bean交互时,在运行它时会出现一些错误。 下面是我在浏览器中看到的错误 生成的servlet错误:[javac]c:\sun\appservernew\domains\domain1\Generated\jsp\j2ee-apps\converterapp\war-ic_war\org\apache\jsp\index_jsp.java:24:未报告的异常javax.ejb

  • 问题内容: 请问为什么第13行中的错误是未报告的异常,必须在声明声明为pr的情况下将其捕获 问题答案: 您需要向引发异常的方法中添加一个,如上所述,以及调用该方法的所有方法

  • 你好,我试图在NetBeans7 IDE,java6,glassFish3.2环境中生成动态报告。我正在使用java创建项目 commons-collections-3.2.1 commons-digester-2.0 dynamicreports-1.3.0 dynamicreports-adhoc-4.0.1 dynamicreports-core-4.0.1 itext-2.1.7 jasp