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. 

} 

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

4

1 回答 1

11

如果您想采用反射路线,那么为什么不使用Field.set(Object, Object)及其更多类型安全的兄弟姐妹(请参阅文档)

f.set(myEntity, obj);

笔记。如果它是私有/受保护的,您可能需要首先使该字段可访问。

但是,如果可以的话,我可能会委托给该对象,它可以通过地图填充自己,例如

myEntity.populateFromMap(myMap);

并在您的班级内完成艰苦的工作。

于 2012-10-12T10:52:37.053 回答