通过java中的reflection设置对象字段的值

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

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 map = new HashMap(); map.put("data1", 1); map.put("data2", "name"); map.put("data3", 1.7); map.put("data4", new SubEntity(11)); 

我需要通过使用hashmap中的reflection来为实体动态的所有字段设置值的正确方法。 像这样的东西:

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

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

如果你想去reflection路线,那么为什么不使用Field.set(Object,Object)及其更安全的兄弟姐妹(参见doc)

 f.set(myEntity, obj); 

注意。 如果字段是私有/受保护的,您可能需要首先进行访问 。

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

 myEntity.populateFromMap(myMap); 

在你class上做艰苦的工作。