我可以通过迭代数组从名称数组中获取局部变量的值吗?在下面的代码示例中

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/

10-15 18:56