假设我有一个类和一个方法
class A { void foo() throws Exception() { ... } }
现在我想为A流传递的每个实例调用 foo ,例如:
A
void bar() throws Exception { Stream<A> as = ... as.forEach(a -> a.foo()); }
问题:如何正确处理异常?该代码无法在我的机器上编译,因为我不处理 foo() 可能引发的异常。throws Exceptionof在这里bar似乎没用。这是为什么?
throws Exception
bar
您需要将您的方法调用包装到另一个不抛出已 检查异常 的方法中。你仍然可以抛出任何属于RuntimeException.
RuntimeException
一个正常的包装习语是这样的:
private void safeFoo(final A a) { try { a.foo(); } catch (Exception ex) { throw new RuntimeException(ex); } }
(超类型 异常Exception仅作为示例,切勿尝试自己捕获) __
Exception
然后你可以用它来调用它:as.forEach(this::safeFoo)。
as.forEach(this::safeFoo)