通过在Java反射为对象字段中设置的值(Set value for object field by

2019-09-24 00:44发布

首先,我有这样的一个对象:

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. 

} 

我怎样才能做到这一点? 假设我有很多子类中的实体。

Answer 1:

如果你想要去的反射路线,那么为什么不使用Field.set(对象,对象)和它的多类型安全的兄弟姐妹(见DOC)

f.set(myEntity, obj);

注意。 您可能需要使字段accessibl é第一,如果是私人/保护。

但是,如果你能我也许会委托给对象,它可以通过地图如填充自身

myEntity.populateFromMap(myMap);

做你的类中硬(ISH)的工作。



文章来源: Set value for object field by reflection in java