调用java时错误_调用使用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


版权声明:本文为weixin_42463736原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。