2012-01-17 21 views
3

Java ASMを使用してコンパイル済みクラスにメソッドを追加しています。実行時に、新たに追加されたメソッドが呼び出されたとき、私は
以下のエラーが発生しています。以下はJava ASMを使用してメソッドを呼び出すときにClassFormatErrorエラーが発生しました

ClassFormatError: Field "valueEquals" in class test/asm/Item has illegal signature "(Ljava/lang/Object;)Z" 

私は以下

public boolean valueEquals(Object obj){ 
     return ItemHelper.valueEquals(obj); 
    } 

を追加することを期待する方法は、このためのasmコードです。

String methodName = "valueEquals"; 
    MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, methodName, "(Ljava/lang/Object;)Z", null, null); 
    mv.visitCode(); 
    mv.visitVarInsn(ALOAD, 1); 
    mv.visitFieldInsn(INVOKESTATIC, "test/asm/ItemHelper", methodName, "(Ljava/lang/Object;)Z"); 
    mv.visitInsn(IRETURN); 
    mv.visitMaxs(2, 1); 
    mv.visitEnd(); 

ここで間違っていることを特定するのに役立つ人がいますか? お手数をおかけしております。

答えて

3

visitFieldInsnの代わりにvisitMethodInsnを使用する必要があります。フィールドにアクセスするのではなくメソッドを呼び出すからです。

+0

ありがとうございます@Viruzzo visitMethodInsnにコードを変更し、問題を修正しました。 –

+0

それから私はあなたが答えを受け入れるべきだと思いますか? – Viruzzo

関連する問題