我可以通过迭代数组从名称数组中获取局部变量的值吗?在下面的代码示例中
public class TestLocalVar {
public static void main(String[] args) {
String[] arrLocalVar = {"varA", "varB", "varC", "varD"};
String varA = "I am A";
String varB = "I am B";
String varC = "";
String varD = "";
for(String localVarName : arrLocalVar){
System.out.println("localVarvalue -->"+localVarName);
//Here Can i get the value of local variable?
}
System.out.println("## Loop End ##");
//Printing the values out side of the loop
System.out.println("varA :"+varA+" ,varB :"+varB+ ", varC :"+varC+ " ,varD :"+varD);
}}
我正在通过迭代其String类型名称Array来动态验证局部变量。
提前致谢。
最佳答案
局部变量不能通过反射访问。您可以访问类,类成员(属性或方法),但不能访问方法或函数(静态方法)中使用的局部变量。
如果要验证属于类成员的字段,则可以访问它们。以下代码演示了如何通过它们的名称获取类实例字段的值。
public class Foo {
int a;
String b;
public Foo(int a, String b) {
this.a = a;
this.b = b;
}
public static void main(String[] args) {
Foo foo = new Foo(42, "Hello there");
try {
Class<?> c = foo.getClass();
// get an object that represent field "a" in class Foo
Field a = c.getDeclaredField("a");
Field b = c.getDeclaredField("b");
System.out.println(String.format(
"foo a=%d, b=%s",
a.getInt(foo), // get the value of field "a" for instance foo
b.get(foo)));
}
catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
印刷品:
foo a = 42,b =你好
关于java - 我可以从局部变量名称数组动态获取局部变量的值吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29391059/