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

如何在java中获取方法中声明的变量名,java,reflection,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 var

如何在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)

  }
}
我该怎么做


提前感谢。

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

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

有很多图书馆可以阅读“.class”文件,但我不能给出具体的建议


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


我认为,对于大型程序来说,如果我们能够了解变量、类型、方法名称和参数列表等,那么理解和分析它将是非常有用的,所以只有


我认为您只需要一个像样的IDE…

来解释另一个答案,没有简单的方法可以通过反射实现这一点

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


Java编译器提供了获取这些信息的内部API。EclipseJDT提供了类似的功能。我们的DMS软件再工程工具包提供了一个完整的解析器,可以方便地访问这些信息,并为构建利用这些额外信息的分析器和/或代码生成器提供了相当多的额外帮助。(您可以在我的网站上的示例Java源代码浏览器中看到DMS提取的这些信息,请参见bio)。

那么您想获得iz?我不认为这是可能的,但是你打算怎么处理它们呢?这些都是局部变量,你无法访问它们的范围之外。也许如果你解释一下为什么需要它们,可能有比反射更好的解决方案?可能是@Ben Thurley的复制品,我认为,对于大型程序来说,如果我们能够了解变量、类型、方法名称和参数列表等,那么理解和分析它将是非常有用的,所以只有。。。