2010-01-24 15 views
17

¿Cómo puedo establecer u obtener un campo en una clase cuyo nombre es dinámico y está almacenado en una variable de cadena?Java: ¿Cómo puedo acceder al campo de una clase con un nombre almacenado en una variable?

public class Test { 

    public String a1; 
    public String a2; 

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

} 
+0

Aunque hay razones válidas para hacer esto, si está tratando de hacer esto, probablemente esté haciendo algo muy incorrecto. –

+0

Su ejemplo de código es muy confuso. –

Respuesta

29

usted tiene que utilizar la reflexión:

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); 
    } 
} 
+0

set() me pide dos parámetros, Objeto y valor, ¿por qué no solo valor? ¿Cuál es el primer parámetro? - Campo classField = this.getClass(). GetField (objField.getName()); \t \t \t \t classField.set (Objeto, Valor) – ufk

+0

gracias al ejemplo borrado todo :) – ufk

+1

@ufk: El primer parámetro es el objeto para el que desea establecer el campo. Tenga en cuenta que obtuvo la instancia 'Field' al consultar la clase; no hay nada que lo vincule a una instancia particular de esa clase. –

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

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

El código anterior sería suficiente.

object.class.getField("foo"); 

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

Cuestiones relacionadas