Установить значение для поля объекта путем отражения в Java

во-первых, у меня есть такой объект:

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));

мне нужен правильный способ установить значение для всего поля динамической сущности с помощью reflect из hashmap. Что-то вроде этого:--4-->

    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. 

} 

как я могу добиться этого? Предположим, у меня много подклассов в entity.

1 ответов


Если вы хотите пройти маршрут отражения, то почему бы не использовать поле.set (Object, Object) и его более типобезопасные братья и сестры (см. doc)

f.set(myEntity, obj);

Примечание. Вам может понадобиться добавить поле кe сначала, если он частный / защищенный.

однако, если вы можете, я бы, возможно, делегировал объект, и он мог бы заполнить себя через карту, например

myEntity.populateFromMap(myMap);

и выполняйте тяжелую (иш) работу в своем классе.