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

} 

どうすればそれを達成できますか?エンティティに多くのサブクラスがあるとします。

4

1 に答える 1

11

リフレクション ルートに進みたい場合は、Field.set(Object, Object)とそのよりタイプ セーフな兄弟を使用してみませんか (ドキュメントを参照)。

f.set(myEntity, obj);

ノート。非公開/保護されている場合は、最初にフィールドにアクセスできるようにする必要がある場合があります。

ただし、可能であれば、おそらくオブジェクトに委任し、マップを介してそれ自体を設定できます。

myEntity.populateFromMap(myMap);

クラス内でハードな(っぽい)作業を行います。

于 2012-10-12T10:52:37.053 に答える