首先,我有一个这样的对象:
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));
我需要正确的方法通过使用哈希映射的反射来为实体动态的所有字段设置值。像这样的事情:
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.
}
我怎样才能做到这一点?假设我在实体中有许多子类。
如果你想走反射路线,那么为什么不使用字段.set(对象, 对象) http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html#set%28java.lang.Object,%20java.lang.Object%29及其更类型安全的兄弟姐妹(参见文档)
f.set(myEntity, obj);
笔记。您可能需要使该领域易于访问 http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/AccessibleObject.html#setAccessible%28boolean%29如果它是私有/受保护的,则首先。
但是,如果可以的话,我也许会委托给该对象,并且它可以通过地图填充自身,例如
myEntity.populateFromMap(myMap);
并在班上完成艰苦的工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)