我知道javassist.expr.MethodCall.getClassName()返回方法调用者的编译时类型,因为它依赖于字节码分析。我想知道是否有一种有效的方法来使用javassist使用某些技巧或代码检查来获取方法调用者的实际运行时类型。
这是一个让事情更清晰的简单例子。
cargo new shared_stuff
在这个例子中,我想找到一种方法来获取“Dog”对象作为方法“a.eat()”的方法调用者
答案 0 :(得分:0)
从javassist.expr.MethodCall中,您可以轻松获取调用此方法的运行时类:
CtClass ctc = javassist.expr.MethodCall.getMethod().getDeclaringClass();
获得调用此方法的类的Javassist表示形式,其中包含有关此类所需的所有内容。
PS如果你真的需要一个Dog实例,你可以使用CtClass的名字反映,例如:
Class clazz = Class.forName(ctc.getName());
Dog dog = ((Dog)clazz).newInstance();