2012-10-12 14 views
6

In primo luogo, ho un oggetto del genere:Impostare il valore per il campo oggetto di riflessione in java

public class Entity { 
    public int data1; 
    public String data2; 
    public float data3; 
    public SubEntity data4; 
} 

public class SubEntity{ 
    public int id; 
    public SubEntity(int id){ 
     tis.id = id; 
    } 
} 

E un HashMap:

HashMap<String, Object> map = new HashMap<String, Object>(); 
    map.put("data1", 1); 
    map.put("data2", "name"); 
    map.put("data3", 1.7); 
    map.put("data4", new SubEntity(11)); 

Ho bisogno il modo giusto per impostare il valore per tutti i campi di entità dinamica da utilizzare riflette da hashmap. Qualcosa di simile a questo:

for (Field f : entity.getClass().getDeclaredFields()) { 
     String name = f.getName(); 
     Object obj = map.get("name"); 
     // Need set value field base on its name and type. 

} 

Come posso raggiungere questo obiettivo? Supponiamo che abbia molte sottoclassi nell'entità.

risposta

9

Se si vuole andare il percorso di riflessione, allora perché non utilizzare Field.set(Object, Object) e le sue più fratelli type-safe (vedi doc)

f.set(myEntity, obj); 

Nota. Potrebbe essere necessario make the field accessibl e per primo se è privato/protetto.

Tuttavia, se possibile, potrei delegare l'oggetto e potrebbe popolarsi tramite la mappa, ad es.

myEntity.populateFromMap(myMap); 

e fare il duro lavoro (ish) all'interno della classe.

Problemi correlati