Java 从作为参数调用的方法引发的异常
我的函数如下所示:Java 从作为参数调用的方法引发的异常,java,exception,Java,Exception,我的函数如下所示: void Foo() throws Exception { ... } 然后在其他方法的参数中调用此方法: Bar( () -> Foo()); Bar()看起来像这样: void Bar(Runnable method) { try { method.run() } catch (Exception e) { ... } } 早些时候,我让Foo()抛出RuntimeException使其工作,但当我将其更改为抛出
void Foo() throws Exception {
...
}
然后在其他方法的参数中调用此方法:
Bar( () -> Foo());
Bar()看起来像这样:
void Bar(Runnable method) {
try {
method.run()
} catch (Exception e) {
...
}
}
早些时候,我让Foo()抛出RuntimeException使其工作,但当我将其更改为抛出异常时,编译器将不允许我运行指示其未捕获异常的代码。我必须使用checked异常,所以返回运行时不是一个选项
解决方案
基于这个解决方案,我在这个调用中使用了try-catch块
Bar( () -> { try { Foo(); } catch (Exception e) { }; } );
无论如何感谢您的帮助我将解释您的问题,即为什么在第二种情况下必须使用选中的异常。(如果这不是您的问题,请相应地编辑)
RuntimeException
是任何在运行时无法修复的异常(如NullPointerException
),因此当您没有捕获它时,编译器不会抱怨。不过,您仍然可以捕获运行时异常
因此,当您将其更改为正常的异常时
编译器会认为,这是您每次都应该捕获的内容,因为它在运行时可能是可修复的。它不起作用,因为未声明为抛出异常
您可以添加一些错误消息吗?当我尝试调用Bar(()->Foo())时,Eclipse在第行;说它是“未处理的异常类型异常”是的,我知道,但是我能做什么呢?调用条(()->Foo());现在是不可能的,除非我将Foo()更改为不抛出异常?这不是不可能的,您只需使用try
块处理它抛出的异常。