2

ASMを使用してJavaバイトコードを生成しています。基本的にあらゆる種類のメソッドを追加の後処理でオーバーライドできる動的プロキシを作成する必要があります。私はそれをすべて行うことができますが、良い方法で行う方法がわからないことが1つあります。

ALOADオーバーライドするメソッドの最初のパラメーターのタイプは任意であるため、ASMコードでは使用できませんがILOAD、、などを使用する必要がある場合があります。私の質問:ロードするパラメータータイプに基づいてLLOADFLOADどのLOAD命令のオペコードが有効であるかを簡単に知る方法があるので、次のようなことをする必要はありません。

if (parameterType == int.class)
    mv.visitVarInsn(ILOAD, 1);
else if 
    ...
else 
    mv.visitVarInsn(ALOAD, 1);
4

1 に答える 1

3

parameterTypeタイプがタイプClassORであり、タイプ記述子(またはなど)Stringを含むタイプであると仮定すると、次のようになります。"I""Ljava/lang/String;"

import org.objectweb.asm.Type;

...

Type parameterAsmType = Type.getType(parameterType);
int opcode = parameterAsmType.getOpcode(Opcodes.ILOAD);
mv.visitVarInsn(opcode, 1);

他のオペコードについても同様です。詳細については、Type.getOpcode()javadocを参照してください。

于 2013-02-21T15:09:23.907 に答える