Java: ¿Cómo puedo acceder al campo de una clase con un nombre almacenado en una variable?

¿Cómo puedo establecer u obtener un campo en una clase cuyo nombre es dynamic y está almacenado en una variable de cadena?

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

Tienes que usar la reflexión:

  • Use Class.getField() para obtener una referencia de Field . Si no es público, deberá llamar a Class.getDeclaredField() lugar
  • Use AccessibleObject.setAccessible para obtener acceso al campo si no es público
  • Use Field.set() para establecer el valor, o uno de los métodos con nombres similares si es un primitivo

Aquí hay un ejemplo que trata del caso simple de un campo público. Una mejor alternativa sería usar propiedades, si es posible.

 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); } } 
 Class actualClass=actual.getClass(); Field f=actualClass.getDeclaredField("name"); 

El código anterior sería suficiente.

 object.class.getField("foo"); 

Lamentablemente, el código anterior no funcionó para mí, ya que la clase tenía una matriz de campo vacía.