我可以从局部变量名的数组动态获取局部变量的值

时间:2015-04-01 12:38:07

标签: java

我可以通过迭代数组从其数组的名称中获取局部变量的值。显示相同的代码示例。

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来动态验证局部变量。

提前致谢。

2 个答案:

答案 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};        

这可能是您没有得到预期结果的原因。