Подтвердить что ты не робот

Java: Как я могу получить доступ к полю класса по имени, хранящемуся в переменной?

Как установить или получить поле в классе, имя которого динамическое и хранится в строковой переменной?

public class Test {

    public String a1;
    public String a2;  

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

}
4b9b3361

Ответ 1

Вы должны использовать отражение:

  • Используйте Class.getField(), чтобы получить Field ссылка. Если это не общедоступно, вам нужно будет вместо Class.getDeclaredField()
  • Используйте AccessibleObject.setAccessible, чтобы получить доступ к полю, если он не является общедоступным.
  • Используйте Field.set(), чтобы установить значение или один из методов с одинаковым именем, если это примитивный

Вот пример, который касается простого случая публичного поля. Хорошей альтернативой было бы использование свойств, если это возможно.

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");

Приведенный выше код был бы достаточным.

object.class.getField("foo");

К сожалению, приведенный выше код не работал у меня, так как класс имел пустой массив полей.