java - 使用asm 4创建一个新字段

标签 java java-bytecode-asm

这是我使用的代码

    String fieldName = "lock";
    String fieldType = "Ljava/util/concurrent/locks/Lock;";
    Object initValue = new ReentrantLock();

    cw.visitField(ACC_PUBLIC, fieldName, fieldType, null, initValue).visitEnd();

我试图添加一行“Lock lock = new ReentrantLock();” 但 asm 抛出错误

线程“main”中的异常 java.lang.IllegalArgumentException:值类 java.util.concurrent.locks.ReentrantLock 在 org.objectweb.asm.ClassWriter.a(来源未知)

最佳答案

您不能将对象作为初始值传递。您需要生成代码,该代码将在代码运行时创建对象,而不是在生成代码时创建对象。

关于java - 使用asm 4创建一个新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18949136/

相关文章:

java - ASM 方法访问者可以与接口(interface)一起使用吗?

java - ASM 4.0树API : mapping of bytecodes in InsnNodes?

java.lang.VerifyError : (class: Main, 方法:主签名:([Ljava/lang/String;)V) 堆栈大小太大

java - 如何使用 ObjectWeb ASM 检查字节码操作 PUTFIELD 正在重新分配属于 'this' 对象的字段?

java - 当我的程序在BlueJ中的文本 'crashing'之后遇到 "%.2f"时,它是 "Gross Pay : "

java - 何时使用 ParameterizedPreparedStatementSetter 而不是 BatchPreparedStatementSetter,反之亦然,使用 Spring batchUpdate?

java - 在 Java 字节码中向函数添加参数

具有存储为一个文件的能力的 Java 嵌入式数据库

java - 使用 CommonsMultipartResolver (Spring 3) 上传文件时是否可以识别文件格式

java - checkstyle + 抑制过滤器