2012-10-12 72 views
6

En primer lugar, Tengo un objeto de esa manera:valor Conjunto de campo de objeto por reflexión en 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; 
    } 
} 

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

necesito el camino correcto para establecer el valor de todos los campos de la entidad dinámica por reflejo de uso de hashmap. Algo como esto:

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. 

} 

¿Cómo puedo lograr eso? Supongamos que tengo muchas sub clases en la entidad.

Respuesta

9

Si quieres ir a la ruta de reflexión, entonces por qué no usar Field.set(Object, Object) y sus más hermanos con seguridad de tipos (véase el doc)

f.set(myEntity, obj); 

Nota. Es posible que necesite make the field accessibl e primero si es privado/protegido.

Sin embargo, si puede, quizás delegue en el objeto y podría rellenarse a través del mapa, p.

myEntity.populateFromMap(myMap); 

y hacer el trabajo duro (ish) dentro de su clase.

Cuestiones relacionadas