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 に答える