从作为参数调用的方法抛出的异常

时间:2015-02-20 12:10:00

标签: java exception

我的功能如下:

void Foo() throws Exception {
...
}

然后我在其他方法的参数中调用此方法:

Bar( () -> Foo());

和Bar()看起来像这样:

void Bar(Runnable method) {
    try {
        method.run()
    } catch (Exception e) {
    ...
    }
}

早些时候,我有Foo()抛出RuntimeException,所以它工作,但当我改变它以抛出异常编译器将不允许我运行我的代码指示其未捕获的异常。我必须使用已检查的异常,因此返回运行时不是一种选择。

基于此解决方案Java 8 Lambda function that throws exception?我在此调用中使用了try catch块

Bar( () -> { try { Foo(); } catch (Exception e) { }; } );

无论如何,感谢您的帮助

2 个答案:

答案 0 :(得分:0)

我会解释你的问题,为什么你必须在第二种情况下使用已检查的例外。 (如果这不是您的问题,请相应地进行编辑)

RuntimeException是任何无法在运行时修复的Exception(如NullPointerException),这就是为什么当你编译时不会抱怨的原因不要抓住它。你仍然可以抓住RuntimeException

因此,当您将其更改为正常Exception时,编译器会认为这是您每次都应该捕获的内容,因为它可能在运行时可以修复。

答案 1 :(得分:0)

它不起作用,因为Runnable.run()未向throw Exception声明。