2012-10-12 26 views
6

首先,我有這樣的一個對象:設定值

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; 
    } 
} 

而且一個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)); 

我需要爲所有字段設置值的正確方法通過使用hashmap反映實體動態。類似這樣的:

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. 

} 

我該如何做到這一點?假設我在實體中有許多子類。

回答

9

如果你想要去的反射路線,那麼爲什麼不使用Field.set(Object, Object)和更多類型安全的兄弟姐妹(見DOC)

f.set(myEntity, obj); 

注意。如果是私人/受保護的,您可能需要首先登錄make the field accessibl

但是,如果你可以,我可能會委託給對象,它可以通過地圖填充自己,例如,

myEntity.populateFromMap(myMap); 

並且在你的課堂上做很難(ish)的工作。