Convert object1 to object2 using reflection
package com.test.Date; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Date; import org.apache.commons.lang.StringUtils; public class ReflectUtils { /** * * * Property is obj1 to obj2 * * @param obj * @param <T> * @return * @throws Exception */ public static <T> T copyToProperties(Object obj, Class<T> clazz) throws Exception { if (obj != null) { Class<?> objClass = obj.getClass(); T newObj = clazz.newInstance(); Field[] newObjFields = clazz.getDeclaredFields(); Field[] objFields = objClass.getDeclaredFields(); for (Field newObjField : newObjFields) { if (!isNormalType(newObjField.getType())) { continue; } String newObjFieldName = newObjField.getName(); for (Field objField : objFields) { if (!isNormalType(objField.getType())) { continue; } String objFieldName = objField.getName(); if (newObjFieldName.equals(objFieldName)) { String upCase = StringUtils.capitalize(newObjFieldName); Method objMethod = objClass.getMethod("get" + upCase); Method newObjMethod = clazz.getMethod("set" + upCase, newObjField.getType()); Object value = objMethod.invoke(obj); if (value != null && newObjMethod != null) { newObjMethod.invoke(newObj, value); } } } } return newObj; } else { return null; } } /** * copy properties from obj to target * @param oldObject * @param newObject * @throws Exception */ public static <T> void copyToProperties(Object oldObject, Object newObject) throws Exception { if (oldObject != null) { Class<?> oldClass = oldObject.getClass(); Class<?> newClass = newObject.getClass(); //T newObj = clazz.newInstance(); Field[] newObjFields = newClass.getDeclaredFields(); Field[] oldObjFields = oldClass.getDeclaredFields(); for (Field newObjField : newObjFields) { if (!isNormalType(newObjField.getType())) { continue; } String newObjFieldName = newObjField.getName(); for (Field objField : oldObjFields) { if (!isNormalType(objField.getType())) { continue; } String objFieldName = objField.getName(); if (newObjFieldName.equals(objFieldName)) { /* * Object value = objField.get(obj); * newObjField.set(newObj, value); */ String upCase = StringUtils.capitalize(newObjFieldName); Method objMethod = oldClass.getMethod("get" + upCase); Method newObjMethod = newClass.getMethod("set" + upCase, newObjField.getType()); Object value = objMethod.invoke(oldObject); if (value != null && newObjMethod != null) { newObjMethod.invoke(newObject, value); } } } } } } public static boolean isNormalType(Class<?> clazz) { if (clazz.equals(String.class) || clazz.equals(Integer.class) || clazz.equals(Integer.TYPE) || clazz.equals(Boolean.class) || clazz.equals(Boolean.TYPE) || clazz.equals(Long.class) || clazz.equals(Long.TYPE) || clazz.equals(Short.class) || clazz.equals(Short.TYPE) || clazz.equals(Double.class) || clazz.equals(Double.TYPE) || clazz.equals(Float.class) || clazz.equals(Float.TYPE) || clazz.equals(Date.class)) { return true; } return false; } }