Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从作为参数调用的方法引发的异常_Java_Exception - Fatal编程技术网

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
块处理它抛出的异常。