Java: How can I access a class's field by a name stored in a variable?

帅比萌擦擦* 提交于 2020-01-08 14:32:04

问题


How can I set or get a field in a class whose name is dynamic and stored in a string variable?

public class Test {

    public String a1;
    public String a2;  

    public Test(String key) {
        this.key = 'found';  <--- error
    } 

}

回答1:


You have to use reflection:

  • Use Class.getField() to get a Field reference. If it's not public you'll need to call Class.getDeclaredField() instead
  • Use AccessibleObject.setAccessible to gain access to the field if it's not public
  • Use Field.set() to set the value, or one of the similarly-named methods if it's a primitive

Here's an example which deals with the simple case of a public field. A nicer alternative would be to use properties, if possible.

import java.lang.reflect.Field;

class DataObject
{
    // I don't like public fields; this is *solely*
    // to make it easier to demonstrate
    public String foo;
}

public class Test
{
    public static void main(String[] args)
        // Declaring that a method throws Exception is
        // likewise usually a bad idea; consider the
        // various failure cases carefully
        throws Exception
    {
        Field field = DataObject.class.getField("foo");
        DataObject o = new DataObject();
        field.set(o, "new value");
        System.out.println(o.foo);
    }
}



回答2:


Class<?> actualClass=actual.getClass();

Field f=actualClass.getDeclaredField("name");

The above code would suffice .

object.class.getField("foo");

Unfortunately the above code didn't work for me , since the class had empty field array.



来源:https://stackoverflow.com/questions/2127197/java-how-can-i-access-a-classs-field-by-a-name-stored-in-a-variable

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!