2010-12-30 6 views
9

Ich habe eine Liste von Zeichenfolgen, Feldnamen, einer Klasse in einer Schleife aus Ressourcenbündel. Ich erstelle ein Objekt und dann mit der Schleife möchte ich Werte für das Objekt festlegen. Zum Beispiel für ObjektWie definieren Sie dynamische Setter und Getter mit Reflektion?

Foo f = new Foo(); 

mit Parametern param1, ich habe string „param1“ und ich mag irgendwie mit ihm wie „set“ + „param1“ und dann gilt es auf f Instanz „set“ concate als:

f.setparam1("value"); 

und gleich für Getter. Ich weiß, Reflexion wird helfen, aber ich konnte es nicht schaffen. Bitte helfen. Vielen Dank!

+0

Wenn Sie Setter und Getter für alles, was jemals existiert, machen, klingt es, als sollten Sie darüber nachdenken, Dinge öffentlich zu machen. – EnabrenTane

+0

Auch wenn Attribute öffentlich sind, wie kann ich Reflexion verwenden, damit sich die Zeichenfolgen wie Felder verhalten? – wasimbhalli

+1

Warum selbst implementieren? Sie können Lombok (http://projectlombok.org/features) verwenden. Fügen Sie Ihrer Klasse einfach '@ Getter' Annotation hinzu und es wird eine Getter-Methode für jedes Feld generiert (Hinweis: Es ist kein Quellcode-Generierungstool). – rodion

Antwort

6

Sie können so etwas tun. Sie können diesen Code genereller machen, so dass Sie es für Looping auf Feldern verwenden können:

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 mit methodName ersetzt werden ... Es funktioniert, vielen Dank :) – wasimbhalli

+0

Hallo, bitte helfen Sie mir. Ich brauche mehr Details. – nurealam11

7
+1

Es ist hilfreich, einige Informationen darüber anzugeben, was die verknüpften Ressourcen zur Beantwortung der Frage tun. – freakTheMighty

+0

Siehe diesen Link für Beispiel [Beispiel] (http://www.codesuggestions.com/java/apache-common-bean-utils-tutorial/) – Uppicharla