2012-01-17 70 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); 
    } 

下面是这种情况的汇编代码的方法。

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

您需要使用visitMethodInsn而不是visitFieldInsn,因为您正在调用方法而不是访问字段。

+0

非常感谢@Viruzzo我将代码更改为visitMethodInsn并解决了问题。 – 2012-01-17 11:57:30

+0

那么我想你应该接受答案? – Viruzzo 2012-01-17 12:09:26