编程语言
首页 > 编程语言> > 调用使用Java ASM添加的方法时发生ClassFormatError错误

调用使用Java ASM添加的方法时发生ClassFormatError错误

作者:互联网

我正在使用Java ASM向已编译的类添加方法.在运行时我得到
调用新添加的方法时发生以下错误.

    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();  

请有人可以帮助我确定我在这里做错了什么.
非常感激你的帮助.

解决方法:

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

标签:java-bytecode-asm,java
来源: https://codeday.me/bug/20191201/2083966.html