小编典典

Java 8:如何在流中使用异常抛出方法?

all

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

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

现在我想为A流传递的每个实例调用 foo ,例如:

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

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


阅读 90

收藏
2022-06-16

共1个答案

小编典典

您需要将您的方法调用包装到另一个不抛出已 检查异常 的方法中。你仍然可以抛出任何属于RuntimeException.

一个正常的包装习语是这样的:

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

(超类型 异常Exception仅作为示例,切勿尝试自己捕获) __

然后你可以用它来调用它:as.forEach(this::safeFoo)

2022-06-16