2016-11-25 6 views
0

ich ein konstruiertes Objekt des Typs unten haben,Java Reflection - Get Current Feld Wert in existierendes Objekt

public class Form { 
    private String a; 
    private String b; 
    private Boolean c; 

    public String getA() { return a; } 
    public void setA (String a) { this.a = a; } 
    public String getB() { return b; } 
    public void setB (String b) { this.b = b; } 
    public Boolean getC() { return c; } 
    public void setC (Boolean c) { this.c = c; } 
} 

Ich bin mit Reflexion ein bestehendes Objekt zu untersuchen, zum Beispiel Dieses Formular: ("testA", "testB", False)

Wie bekomme ich den aktuellen Wert eines bestimmten Feldes, sagen wir String b?

// Assume "form" is my current Form object 
Field[] formFields = form.getClass().getDeclaredFields(); 
if (formFields != null) { 
    for (Field formField : formFields) { 
     Class type = formField.getType(); 
     // how do I get the current value in this current object? 
    } 
} 

Antwort

3

Nutzungsmethoden java.lang.reflect.Field:

// Necessary to be able to read a private field 
formField.setAccessible(true); 

// Get the value of the field in the form object 
Object fieldValue = formField.get(form); 
1

Dies ist eine Situation, wo ich einen großen Befürworter bin eine externe Bibliothek zu verwenden. Apache Commons BeanUtils eignet sich hervorragend für diesen Zweck und verbirgt einen Großteil der Komplexität von java.lang.reflect. Sie können es hier finden: http://commons.apache.org/proper/commons-beanutils/

BeanUtils verwenden, wird der Code Ihre Notwendigkeit, die folgenden wäre zu erfüllen:

Object valueOfB = PropertyUtils.getProperty(formObject, "b"); 

Ein weiterer Vorteil BeanUtils der Verwendung ist, dass sie alle die Prüfung tut, um sicherzustellen, dass Sie eine richtige Accessor-Methode für "b" - getB(). Es gibt auch andere Hilfsmethoden in der BeanUtils-Bibliothek, mit denen Sie alle Arten von Java-Property-Manipulationen durchführen können.

+0

Vielen Dank, das funktioniert, aber es gibt nur einen String zurück. Möglicherweise muss ein bestimmtes Objekt zurückgegeben werden. –

+0

Entschuldigung. Ich habe die Antwort aktualisiert. Ich dachte, du wolltest nur eine Schnur. Ich habe meine Antwort aktualisiert. Wenn Sie PropertyUtils verwenden (das sich in dieser Bibliothek befindet), wird Ihnen ein Rohobjekt zurückgegeben. – mightyrick