2010-12-30 20 views
9

Tengo una lista de cadenas, nombres de campos, de una clase en un bucle del paquete de recursos. Creo un objeto y luego usando bucle quiero establecer valores para ese objeto. Por ejemplo, para el objeto¿Cómo definir dinámicos setter y getter utilizando reflexión?

Foo f = new Foo(); 

con parámetros param1, tengo cadena "param1" y de alguna manera quiero concate "set" con él como "set" + "param1" y luego aplicarlo en la instancia f como:

f.setparam1("value"); 

y lo mismo para getter. Sé que la reflexión ayudará, pero no podría lograrlo. Por favor ayuda. ¡Gracias!

+0

si está creando setters y getters para todo lo que alguna vez existirá, parece que debería considerar hacer las cosas públicas. – EnabrenTane

+0

incluso si los atributos son públicos, ¿cómo puedo usar la reflexión para que las cadenas se comporten como campos? – wasimbhalli

+1

¿Por qué implementarlo usted mismo? Puedes usar Lombok (http://projectlombok.org/features). Simplemente agregue la anotación '@ Getter' a su clase y generará un método getter para cada campo (nota: no es una herramienta de generación de código fuente). – rodion

Respuesta

6

Puede hacer algo como esto. Usted puede hacer el código más genérico para que pueda usarlo para recorrer en los campos de:

Class aClass = f.getClass(); 
Class[] paramTypes = new Class[1]; 
paramTypes[0] = String.class; // get the actual param type 

String methodName = "set" + fieldName; // fieldName String 
Method m = null; 
try { 
    m = aClass.getMethod("confirmMsg", paramTypes); 
} catch (NoSuchMethodException nsme) { 
    nsme.printStackTrace(); 
} 

try { 
    String result = (String) m.invoke(f, fieldValue); // field value 
    System.out.println(result); 
} catch (IllegalAccessException iae) { 
    iae.printStackTrace(); 
} catch (InvocationTargetException ite) { 
    ite.printStackTrace(); 
} 
+1

confirmMsg para ser reemplazado con methodName ... Funciona, muchas gracias :) – wasimbhalli

+0

hola, por favor ayúdenme. Necesito más detalles. – nurealam11

7
+1

Es útil proporcionar cierta información sobre qué hacen los recursos vinculados para responder la pregunta. – freakTheMighty

+0

Consulte este enlace para ejemplos [ejemplo] (http://www.codesuggestions.com/java/apache-commons-bean-utils-tutorial/) – Uppicharla

Cuestiones relacionadas