Можно ли установить переходное свойство / флаг поля с помощью отражения в Java? - PullRequest
1 голос
/ 02 августа 2010

Есть ли простой способ указать, должно ли поле быть переходным или нет в Java с отражением, подобно тому, как флаг доступности поля может быть установлен с помощью setAccessible ()?

Ответы [ 2 ]

1 голос
/ 02 августа 2010

Отражение само по себе не может изменить код.

Агенты Java должны позволять вам переписывать класс по мере его загрузки.

Вы можете использовать отражение, чтобы изменить serialPersistentFields, если он существует (маловероятно)до того, как механизм сериализации кэширует данные класса.Вы можете использовать отражение с высокой степенью зависимости от версии, чтобы изменить данные внутри механизма сериализации.

0 голосов
/ 02 августа 2010

Я не вижу прямого способа сделать это в Java API, но это возможно с чем-то вроде JRebel или LiveRebel http://www.zeroturnaround.com/jrebel/comparison/. Вы можете использовать что-то вроде ASM из http://asm.ow2.org/, чтобы переписать байт-код с переходными модификаторами в соответствующих полях. Затем запустите JRebel / LiveRebel, чтобы заменить версию класса во время выполнения.

Я не пытался автоматизировать это с ASM, но я использовал JRebel с IntelliJ IDEA для успешного выполнения подобных изменений во время интерактивной разработки.

...