具体的方法是什么,我想是让'的hashCode()调用Java中的特定方法的对象的值对象的hashCode()方法。例如,为了得到调用Java中
public class Caller {
public void aMethod() {
Callee calleeObj = new Callee();
calleeObj.aSpecificMethod();
//do something
}
}
我想知道的是它在运行时调用calleeObj.aSpecificMethod()
来电人的hashCode()值。它用于绘制如下的对象图。
作为一个约束,我只能用字节码测试技术修改”的.class'文件。
为了做到这一点,我已经试过Javassist
库仪器内部Callee.aSpecificMethod()
但这种方式无法获得来电者的物体。究其原因似乎是显而易见的,因为在“Callee.aSpecificMethod()
”改动的代码只能在Callee
类,而不是Caller
类接入代码。
有没有办法捕捉的hashCode()使用了Javassist调用者的物体的价值?我也在考虑ASM 5.0,但使用ASM 5.0是最后一种选择,因为我迄今为止基于Javassist构建了许多代码。
改变方法? 'calleeObj.aSpecificMethod(this.hashCode())' – immibis
你也可以为调用者对象更改类吗?如果是这样的话,只需按照@immibis的建议添加一个参数即可。否则,我不认为这是可能的。 (如果从静态上下文中调用'hashCode'会发生什么?即,没有调用对象。) – aioobe
嗨,你可能会想尝试与AOP的东西(的AspectJ)来实现这一目标? –