到目前为止,我一直使用 try catch finally 作为异常处理机制,但我想制作一个通用的 finally 块来执行一些必要的操作。
在我的场景中,我必须在捕获任何 A、B、C 类异常后执行相同的操作。
问题是我不想在每个 try catch 块之后声明 finally 块。这对我来说非常繁琐,因为我有近 50 60 个班级,其中许多班级都在使用频繁的 try catch 块。
所以我要求一种更简单的方法来执行同样的事情。
有没有人为此找到捷径?提前多谢。
到目前为止,我一直使用 try catch finally 作为异常处理机制,但我想制作一个通用的 finally 块来执行一些必要的操作。
在我的场景中,我必须在捕获任何 A、B、C 类异常后执行相同的操作。
问题是我不想在每个 try catch 块之后声明 finally 块。这对我来说非常繁琐,因为我有近 50 60 个班级,其中许多班级都在使用频繁的 try catch 块。
所以我要求一种更简单的方法来执行同样的事情。
有没有人为此找到捷径?提前多谢。
在类加载器加载类之前,您可以尝试在应用程序启动时使用javassist检测您的类。
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
public class Main {
private int run() {
return new Test().myMethod();
}
public static void main( String[] args ) throws Exception {
ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get( "Test" );
CtMethod cm = cc.getDeclaredMethod( "myMethod" );
// insertAfter(..., true) means this block will be executed as finally
cm.insertAfter( "{ System.out.println(\"my generic finally clause\"); }", true );
// here we override Test class in current class loader
cc.toClass();
System.out.println( new Main().run() );
}
}
// another file (Test.java)
public class Test {
int myMethod() {
throw new RuntimeException();
}
}