我可以通过迭代数组从其数组的名称中获取局部变量的值。显示相同的代码示例。
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);
}}
我正在通过迭代它的字符串类型名称Array来动态验证局部变量。
提前致谢。
答案 0 :(得分:1)
无法通过反射访问局部变量。您可以访问类,类成员(属性或方法),但不能访问方法或函数中使用的局部变量(静态方法)。
如果要验证属于某个类成员的字段,则可以访问它们。以下代码演示了如何通过名称获取类实例字段的值。
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 =你好
答案 1 :(得分:0)
变量localVarname
仅在您当前循环的可用范围内。你不能在外面使用它。如果要在外部使用它,则需要在for循环之外声明一个变量。但是这不适用于您的情况,因为如果将外部变量设置为当前String
值,则每次循环都会覆盖它。
for(String localVarName : arrLocalVar){
// here you can use localVarname
}
// here you cant use localVarName, the variable doesnt exist anymore
但是你可以像这样访问数组的值:
System.out.println("varA:" + arrLocalVar[0]); // prints varA
顺便说一下,你定义了你的数组:
String[] arrLocalVar = {"varA", "varB", "varC", "varD"};
您的数组现在具有值varA,varB等,但实际上不是您的变量值。如果要使用变量中的值对其进行初始化,请执行以下操作:
String[] arrLocalVar = {varA, varB, varC, varD};
这可能是您没有得到预期结果的原因。