0

到目前为止,我一直使用 try catch finally 作为异常处理机制,但我想制作一个通用的 finally 块来执行一些必要的操作。

在我的场景中,我必须在捕获任何 A、B、C 类异常后执行相同的操作。

问题是我不想在每个 try catch 块之后声明 finally 块。这对我来说非常繁琐,因为我有近 50 60 个班级,其中许多班级都在使用频繁的 try catch 块。

所以我要求一种更简单的方法来执行同样的事情。

有没有人为此找到捷径?提前多谢。

4

1 回答 1

0

在类加载器加载类之前,您可以尝试在应用程序启动时使用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();
  }
}   
于 2015-02-20T09:34:27.447 回答