Как изменить значение статического поля с помощью BCEL?

Я хочу сбросить статическое поле, используя, например, BCEL

private static final int myValue = 1;

в myValue = 2, Использование другой библиотеки байт-кода, такой как ASM, невозможно.

1 ответ

Решение

Код в моем вопросе: внедрение кода в существующий метод с использованием BCEL, используемого для редактирования статического массива. Однако позже я изменил его, чтобы отредактировать локальную переменную. Код для редактирования статической переменной был примерно таким:

InstructionList il = new InstructionList();
InstructionFactory f = new InstructionFactory(constantPoolGen);
il.append(f.createGetStatic("MyClassName","MyVariableName",Type.INT));
il.append(new PUSH(contantPoolGen, 2));
il.append(new ISTORE());

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

Другие вопросы по тегам