簡體   English   中英

通過java中的反射設置對象字段的值

[英]Set value for object field by reflection 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;
    }
}

還有一個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. 

} 

我怎樣才能做到這一點? 假設我在實體中有很多子類。

如果你想去反射路線,那么為什么不使用Field.set(Object,Object)及其更安全的兄弟姐妹(參見doc)

f.set(myEntity, obj);

注意。 如果字段是私有/受保護的,您可能需要首先訪問該字段

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

myEntity.populateFromMap(myMap);

在你班上做艱苦的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM