import java.util.HashMap;
import java.util.Map;
public class ObjectMapConversion {
public static void main(String[] args) {
// Create an object
Person person = new Person("Tom", 20);
// Convert object to Map
Map<String, Object> personMap = objectToMap(person);
System.out.println("Object to Map:" + personMap);
// Convert Map to an object
Person newPerson = mapToObject(personMap, Person.class);
System.out.println("Map to object:" + newPerson);
}
/**
* Convert object to Map
* @param obj object
* @return The map corresponding to the object
*/
public static Map<String,Object> objectToMap(Object obj) {
Map<String, Object> map = new HashMap<>();
for (java.lang.reflect.Field field : obj.getClass().getDeclaredFields()) {
try {
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return map;
}
/**
* Convert Map to an object of the specified type
* @param map Map
* @param clazz object type
* @param <T> Object Type
* @return object
*/
public static <T> T mapToObject(Map<String,Object> map, Class<T> clazz) {
T obj = null;
try {
obj = clazz.newInstance();
for (java.lang.reflect.Field field : obj.getClass().getDeclaredFields()) {
field.setAccessible(true);
Object value = map.get(field.getName());
if (value != null) {
field.set(obj, value);
}
}
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return obj;
}
/**
* Personnel
*/
static class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
}