gpt4 book ai didi

java - 通过java中的反射设置对象字段的值

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:59:34 27 4
gpt4 key购买 nike

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

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)呢?及其类型更安全的 sibling (参见文档)

f.set(myEntity, obj);

注意。您可能需要 make the field accessibl如果它是私有(private)的/ protected ,则首先是 e。

但是,如果可以的话,我可能会委托(delegate)给对象,它可以通过 map 填充自己,例如

myEntity.populateFromMap(myMap);

并在类里面完成艰苦的(差不多)工作。

关于java - 通过java中的反射设置对象字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12857425/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com