2010-12-30 8 views
9

Ho un elenco di stringhe, nomi di campi, di una classe in un ciclo dal bundle di risorse. Creo un oggetto e poi usando il ciclo voglio impostare i valori per quell'oggetto. Ad esempio, per oggettoCome definire il setter dinamico e il getter usando la riflessione?

Foo f = new Foo(); 

con il parametro param1, ho stringa "param1" e in qualche modo voglio concate "set" con esso come "set" + "param1" e poi applicarlo su istanza f come:

f.setparam1("value"); 

e lo stesso per getter. So che la riflessione aiuterà ma non potrei riuscire a farlo. Per favore aiuto. Grazie!

+0

se stai facendo setter e getter per tutto ciò che sarà mai esistito, sembra che dovresti considerare di rendere pubbliche le cose. – EnabrenTane

+0

anche se gli attributi sono pubblici, come posso utilizzare la riflessione in modo che le stringhe si comportino come campi? – wasimbhalli

+1

Perché implementarlo da solo? Puoi usare Lombok (http://projectlombok.org/features). Basta aggiungere l'annotazione '@ Getter' alla classe e genererà un metodo getter per ogni campo (nota: non è lo strumento di generazione del codice sorgente). – rodion

risposta

6

Si può fare qualcosa di simile. È possibile rendere il codice più generico in modo che si può utilizzare per loop sui campi:

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 da sostituire con methodName ... Funziona, grazie mille :) – wasimbhalli

+0

ciao, per favore aiutami. Ho bisogno di maggiori dettagli. – nurealam11

7
+1

È utile fornire alcune informazioni su cosa fanno le risorse collegate per rispondere alla domanda. – freakTheMighty

+0

Consulta questo link per esempio [esempio] (http://www.codesuggestions.com/java/apache-commons-bean-utils-tutorial/) – Uppicharla