例如:
public class Demo{
public String getReflectString() {
return "string from reflect";
}
public String reflectMethod() throws Exception {
Method method = ReflectCase.class.getMethod("getReflectString");
return (String) method.invoke(this);
}
}
反射调用的方法Demo#getReflectString
,我想找到一种方法来获取程序中以这种方式调用的所有方法。
我想出了一个尚未实施的解决方案。
读取类文件的内容,从指令开始,找到Method#invoke
指令,然后回头查找调用该方法的实例,然后获取实例对应的Class和MethodName。
但是,这种方法存在问题,如果将Class或MethodName甚至Method作为参数传递,则很难找到相应的内容。
在此基础上,想办法改进,遍历所有方法,检查方法的说明。如果在方法Method#invoke
中获得A()
指令,并且Class和MethodName作为参数传入,则记录方法A()
和参数的顺序。在以下检查中,如果存在方法调用A()
,则可以获取传递给方法A()
参数的值,以获取所需的值。
但是,此解决方案需要遍历整个程序的指令,当程序非常大时,这可能非常耗时。如果方法调用太多级别,则算法的实现可能相当复杂。所以想问一下,这个想法的可行性,还是有更好的方法来解决这个问题。
提前致谢。