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

Java 8:如何处理流中的异常抛出方法?

虞裕
2023-03-14

假设我有一个类和一个方法

class A {
  void foo() throws Exception() {
    ...
  }
}

现在,我想为由流传递的a的每个实例调用foo,如下所示:

void bar() throws Exception {
  Stream<A> as = ...
  as.forEach(a -> a.foo());
}

问题:如何正确处理异常?代码在我的机器上没有编译,因为我没有处理foo()可能引发的异常抛出异常在这里似乎没有用。这是为什么?

共有1个答案

逑俊楚
2023-03-14

您需要将您的方法调用包装到另一个方法调用中,在另一个方法调用中不抛出检查异常。您仍然可以抛出runtimeexception的子类。

一个正常的包装习惯用法是这样的:

private void safeFoo(final A a) {
    try {
        a.foo();
    } catch (Exception ex) {
        throw new RuntimeException(ex);
    }
}

(Supertype exceptionexception仅用作示例,千万不要尝试自己捕捉它)

然后您可以使用:as.foreach(this::safefoo)调用它。

 类似资料:
  • 我有下面的代码块。我得到的是的catch块没有处理它。有人能告诉我如何处理下面的块抛出的异常吗?

  • 我正在使用Spring4和Tomcat。问题是有时我不得不在我的筛选器中抛出一个(自定义的)RuntimeException(控件甚至还没有到达控制器)。问题是,由于我没有抛出tomcat理解的异常,它被转换为500(内部服务器错误)。我相信403禁止会比500好(对于我的定制例外)。我查看了和注释。但只有当控件到达控制器时,这些才起作用。 到目前为止,我在筛选器的中将状态手动设置为403。有没有

  • Java 8并行流在consuming子句中抛出异常时如何表现,例如在处理中?例如,以下代码: 它是否立即停止处理的元素?它是否等待已启动的元素完成?它是否等待所有的流完成?它是否在抛出异常后开始处理流元素? 什么时候回来?在异常之后立即?消费者处理完所有/部分元素后? 在并行流引发异常后,是否继续处理元素?(找到了发生这种情况的案例)。 这里有一般规则吗? 编辑(15-11-2016) 试图确定

  • 假设您有一个第三方库,它公开了下一个接口。 代码无法编译,因为Function不知道如何处理由domap声明的CheckedException。我想出了两个可能的解决方案。 解决方案#1-包装调用 解决方案#2-编写实用程序方法

  • 虽然已经在响应拦截器里做了一些全局处理,最后是通过 Promise.reject 抛出的异常 现在每个接口请求方法都还是得写 try/catch 或者 .catch() 真的好麻烦 有什么比较好的方案吗?

  • 在你可以捕获异常之前,一些代码必须抛出一个异常。任何代码都可能会抛出异常:您的代码,来自其他人编写的包(例如Java平台附带的包)或Java运行时环境的代码。无论是什么引发的异常,它总是通过 throw 语句抛出。 您可能已经注意到,Java平台提供了许多异常类。所有类都是Throwable类的后代,并且都允许程序区分在程序执行期间可能发生的各种类型的异常。 您还可以创建自己的异常类来表示在您编写