使用Javassist库检测方法调用者的运行时类型

时间:2016-06-02 03:17:23

标签: javassist

我知道javassist.expr.MethodCall.getClassName()返回方法调用者的编译时类型,因为它依赖于字节码分析。我想知道是否有一种有效的方法来使用javassist使用某些技巧或代码检查来获取方法调用者的实际运行时类型。

这是一个让事情更清晰的简单例子。

cargo new shared_stuff

在这个例子中,我想找到一种方法来获取“Dog”对象作为方法“a.eat()”的方法调用者

1 个答案:

答案 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();