1

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

  }
}

我怎样才能做到这一点?

提前致谢..

4

2 回答 2

2

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

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

周围有用于读取“.class”文件的库,用于各种目的,但我无法给出具体建议。


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


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

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

于 2013-02-08T10:45:43.173 回答
1

套用另一个答案,使用反射没有简单的方法来做到这一点

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

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

于 2013-02-08T10:55:44.847 回答