Как изменить значение статического поля с помощью 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, который я использовал, был введен в метод, поэтому я не уверен, что это работает для вас..