我正在使用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();
请有人帮助我确定我在这里做错了什么。 非常感谢您的帮助。
答案 0 :(得分:3)
您需要使用visitMethodInsn
而不是visitFieldInsn
,因为您正在调用方法,而不是访问字段。