如何获取在java中的方法中声明的变量名称

时间:2013-02-08 10:12:54

标签: java reflection

如何获取在java类中的方法中声明的变量名?

例如:

public class A {
  String x;
  public void xyz(){
     int i;
     String z = null;
     //some code here
  }
  Method[] methods = A.class.getDeclaredMethods();
  for (Method q = methods){

      //some code here to get the variables declared inside method (i.e q)

  }
}

我该怎么做?

提前致谢..

2 个答案:

答案 0 :(得分:2)

没有简单的方法可以做到这一点。

如果这些是字段,您可以使用反射获取其名称。但是,本地变量和参数名称不会加载到JVM中。因此,您需要求助于读取“A.class”文件并提取该方法的调试信息。坏消息是,如果没有使用调试信息编译类,那么即使这样也行不通。

为了各种目的,有些库可以读取“.class”文件,但我不能给出具体的推荐。


但64,000美元的问题是“但为什么......?”。从Java列出方法的局部变量名称有什么意义?你能不能看一下源代码?你不能用“javap”转储“.class”文件或用一些第三方反编译器反编译它吗?


  

我认为对于大型程序,如果我们能够了解变量的类型和方法名称及其参数列表等,那么理解和分析它将是有用的。

我认为你只需要一个体面的IDE ......

答案 1 :(得分:1)

用另一个答案来解释,使用反射没有(简单)的方法。

有办法做到这一点。您需要一个完整的Java源代码解析器和名称/类型解析器(“符号表”)。

Java编译器提供内部API来获取该信息。 Eclipse JDT提供类似的东西。我们的DMS软件再造工具包提供了一个完整的解析器,可以轻松访问这些信息,并为构建利用这些额外信息的分析器和/或代码生成器提供了大量额外帮助。 (您可以在我的站点的示例Java源代码浏览器中看到DMS提取的这些信息,请参阅bio)。