我怎样才能找到反射

时间:2017-11-30 11:15:43

标签: java reflection

例如:

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()参数的值,以获取所需的值。

但是,此解决方案需要遍历整个程序的指令,当程序非常大时,这可能非常耗时。如果方法调用太多级别,则算法的实现可能相当复杂。所以想问一下,这个想法的可行性,还是有更好的方法来解决这个问题。

提前致谢。

0 个答案:

没有答案