1

BCEL で、クラスの静的初期化子で静的フィールドを初期化したいと考えています。私はそうする方法を見つけていません...ヒントはありますか?

次のようなものが必要です:

// Field descriptor #8 [I
private static int[] a;

static {};
     0  bipush 10
     2  multianewarray int[] [9]
     6  putstatic Output.a : int[] [11]
     9  return

ただし、次のようMethodGenなものを(で)生成できるようです:

public static void {}();
   0  bipush 10
   2  multianewarray int[] [9]
   6  putstatic Output.a : int[] [11]
   9  return

もちろん、これは同じではありません。

4

1 に答える 1

2

自分で見つけただけです。

    MethodGen method = new MethodGen(Constants.ACC_STATIC,
            Type.VOID,
            new Type[] { }, new String[] { }, "<clinit>",
            cg.getClassName(), il, cg.getConstantPool());

clinit はクラス初期化子のようです...

于 2008-11-05T01:34:29.033 に答える