我需要知道本地变量的类型。我正在使用Java反射,但是我无法获取它。请问你能告诉我如何知道本地变量的类型/名称吗?
我能否使用Java反射获取有关本地变量的信息?
我需要知道本地变量的类型。我正在使用Java反射,但是我无法获取它。请问你能告诉我如何知道本地变量的类型/名称吗?
我能否使用Java反射获取有关本地变量的信息?
假设你谈论的是方法或构造函数的局部变量,你无法使用反射来获取它们。你需要:
后者将允许您访问局部变量的值,但仅在JVM被调试代理挂起时才能进行。
这两种方法都依赖于涉及的类编译时包含调试信息。具体来说,这些类需要使用“本地变量调试信息”编译;例如使用javac -g ...
。默认情况下不包括“vars”调试信息。
简而言之,你不行。局部变量的名称不会被编译器保留。
作为一个快速实验,我使用Java 6和默认编译器选项编译了以下类:
public class X {
public static void main(String[] args) {
int var = 2;
System.out.println(var);
}
}
快速检查生成的.class
文件可知,局部变量(var
)的名称并没有出现在其中。
您可以使用字节码反向工程库(如ASM)来获取本地变量映射。但请注意,本地变量的名称可能不总是存在于字节码中,但其数量和类型始终存在。
无法通过反射获取此信息。反射仅适用于方法级别,而本地变量在代码块级别上。
String s = new String("This is a sample");
Class<String> type = s.getClass();
for ( Field f : type.getFields() ) {
System.out.printf("Field %s is of type %s%n", f.getName(), f.getType().getName());
}