3

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

ここで私が間違っていることを特定するのを手伝ってくれる人がいます。よろしくお願いいたします。

4

1 に答える 1

3

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

于 2012-01-17T10:54:58.983 に答える