2013-09-22 2 views
0

Это код им с помощьюСоздание нового поля с ассемблере 4

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

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

Im пытается добавить строку «Замок блокировки = новый ReentrantLock();» но ASM бросает ошибку

Исключение в потоке "основной" java.lang.IllegalArgumentException: значение класса java.util.concurrent.locks.ReentrantLock в org.objectweb.asm.ClassWriter.a (Unknown Source)

ответ

2

Вы не можете передать объект в качестве начального значения. Вам нужно сгенерировать код, который будет создавать объект при запуске кода, а не при создании кода.

+0

Как это сделать?, Im new to asm – clienthax

+0

Предлагаю вам написать код на Java и использовать ASMifier для выгрузки кода для его регенерации. Вы также можете использовать http://asm.ow2.org/eclipse/ или плагин IntelliJ для просмотра кода в вашей среде IDE. –

+0

Aha thats very helpfull, Спасибо! – clienthax