Как я могу установить или получить поле в классе, имя которого является динамичным и сохранено в строковой переменной?
public class Test {
public String a1;
public String a2;
public Test(String key) {
this.key = 'found'; <--- error
}
}
Вы должны использовать отражение:
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);
}
}