有没有办法覆盖try catch的行为,最后?

时间:2013-09-16 23:44:35

标签: java android try-catch try-catch-finally finally

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

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

事情是我不想在每次尝试catch块之后声明finally块。 对我来说这是一个非常繁琐的程序,因为我有近60个60级的课程,其中很多都使用频繁的try catch块。

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

有没有人找到这方面的捷径? 我提前多谢了。

1 个答案:

答案 0 :(得分: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();
  }
}