Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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 Handling_Lambda_Try Catch - Fatal编程技术网

Java 避免在每个呼叫站点尝试/捕获,而是选择单一地点

Java 避免在每个呼叫站点尝试/捕获,而是选择单一地点,java,exception-handling,lambda,try-catch,Java,Exception Handling,Lambda,Try Catch,我有一堆Java方法,可以随意修改。让我们把这组方法称为B 然后我有一些自动生成的Java代码来调用B中的方法 B代码在其他一些自动生成的代码中调用方法。让我们把这个代码称为C 所以调用流程是:A->B->C,其中我只能修改B方法 C方法可能抛出我希望在B中捕获的异常 我的异常处理对于所有C方法都是一样的 我可以在调用C方法的B中的每个调用站点复制try-catch块。但我有数百种方法,因此我希望将常见异常处理放在一个地方 一个想法是将C调用放入lambda中,然后将lambda传递给一个公共i

我有一堆Java方法,可以随意修改。让我们把这组方法称为B

然后我有一些自动生成的Java代码来调用B中的方法

B代码在其他一些自动生成的代码中调用方法。让我们把这个代码称为C

所以调用流程是:A->B->C,其中我只能修改B方法

C方法可能抛出我希望在B中捕获的异常

我的异常处理对于所有C方法都是一样的

我可以在调用C方法的B中的每个调用站点复制try-catch块。但我有数百种方法,因此我希望将常见异常处理放在一个地方

一个想法是将C调用放入lambda中,然后将lambda传递给一个公共invokelambda方法,该方法可以在try-catch块中执行lambda

还有其他想法吗

问候
标记使用lambdas是可以的,但是,您不应该忘记每次都使用那些lambdas。对于由许多程序员开发的项目来说,这可能是有问题的,因为每个程序员都应该知道这一点

另一个解决方案是。为此,您需要使用一些框架,例如Spring或其他东西


对于AOP,try-catch块将在运行时自动应用。当然,如果你设置了相应的扩展点和拦截器。可能有一些AOP工具可以在编译时更改字节码。

是否涉及多个线程?在Java 8之前,Java不会有lambdas。您可以使用,但这可能与将C调用包装到调用Cacch块中的公共方法的try-catch块一样冗长,除非您有几个不同的catch块。当然可以。让我来解决这个问题。@Jack您可以假设为单线程。您可以使用Thread.setUncaughtExceptionHandler捕获该线程上的所有内容,这些内容可以只捕获所需的异常,也可以转发它们。