使用asm创建一个新字段4

时间:2013-09-22 21:52:37

标签: 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:value class java.util.concurrent.locks.ReentrantLock     在org.objectweb.asm.ClassWriter.a(未知来源)

1 个答案:

答案 0 :(得分:2)

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