有没有办法使用javassist获取局部变量的名称?我的最终目标是在运行时获取Objects哈希码。例如,如果我有一个代码片段,如:
void try(){
Integer a = 123;
System.out.println(a);
}
我想对它进行检测,使其看起来像:
void try(){
Integer a = 123;
System.out.println(a.hashCode());
System.out.println(a);
}
所以,我正在尝试获取本地变量名称' a'然后在代码中检测回来。有没有得到这个名字,还有,有没有更好的方法做同样的事情?
感谢。
答案 0 :(得分:0)
局部变量的名称a
仅是元信息。在运行时,此信息取决于索引。对于非静态方法,局部变量将存储在包含引用的数组中:
------------
| 0 | 1 |
------------
| this | a |
------------
通过执行a
指令来执行访问ALOAD_1
。你需要做的是解析这样一条指令的字节代码并重复它,调用哈希码方法然后打印它。