Есть ли способ получить имена локальных переменных с помощью javassist? Моя конечная цель - получить хэш-код объектов во время выполнения. Например, если у меня есть фрагмент кода, например:
void try(){
Integer a = 123;
System.out.println(a);
}
Я хотел бы измерить его так, чтобы он выглядел примерно так:
void try(){
Integer a = 123;
System.out.println(a.hashCode());
System.out.println(a);
}
Итак, я пытаюсь получить локальное имя переменной "a", а затем инструмент, который возвращается в код. Есть ли у вас имя, а также есть ли лучший способ сделать то же самое?
Благодарю.
Имя a
локальной переменной является только метаинформацией. Во время выполнения эта информация зависит от индекса. Для нестатического метода локальные переменные будут храниться в массиве, содержащем ссылки:
------------
| 0 | 1 |
------------
| this | a |
------------
Доступ к a
выполняется путем выполнения команды ALOAD_1
. Что вам нужно сделать, так это разобрать байт-код для такой команды и повторить его, вызвав метод хеш-кода и распечатав его.
this
соответствует переменной0
в начале метода. Компилятор может использовать индекс1
дляa
но он также может использовать больший индекс, имея неиспользуемые индексы междуthis
иa
(но это довольно необычно), но он также может использовать индекс0
дляa
посколькуthis
не используется в последующем коде…