转自:http://blog.csdn.net/tarrant1/article/details/10954633
- package com.appdev.bsf.server.common;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.util.HashMap;
- import java.util.Map;
- public class ObjectDynamicCreator {
- /**
- * 返回由对象的属性为key,值为map的value的Map集合
- *
- * @param obj
- * Object
- * @return mapValue Map<String,String>
- * @throws Exception
- */
- public static Map<String, String> getFieldVlaue(Object obj) throws Exception {
- Map<String, String> mapValue = new HashMap<String, String>();
- Class<?> cls = obj.getClass();
- Field[] fields = cls.getDeclaredFields();
- for (Field field : fields) {
- String name = field.getName();
- String strGet = "get" + name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
- Method methodGet = cls.getDeclaredMethod(strGet);
- Object object = methodGet.invoke(obj);
- String value = object != null ? object.toString() : "";
- mapValue.put(name, value);
- }
- return mapValue;
- }
- /**
- * 返回由Map的key对属性,value对应值组成的对应
- *
- * @param map
- * Map<String,String>
- * @param cls
- * Class
- * @return obj Object
- * @throws Exception
- */
- public static Object setFieldValue(Map<String, String> map, Class<?> cls) throws Exception {
- Field[] fields = cls.getDeclaredFields();
- Object obj = cls.newInstance();
- for (Field field : fields) {
- Class<?> clsType = field.getType();
- String name = field.getName();
- String strSet = "set" + name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
- Method methodSet = cls.getDeclaredMethod(strSet, clsType);
- if (map.containsKey(name)) {
- Object objValue = typeConversion(clsType, map.get(name));
- methodSet.invoke(obj, objValue);
- }
- }
- return obj;
- }
- /**
- * 将Map里面的部分值通过反射设置到已有对象里去
- *
- * @param obj
- * Object
- * @param data
- * Map<String,String>
- * @return obj Object
- * @throws Exception
- */
- public static Object setObjectFileValue(Object obj, Map<String, String> data) throws Exception {
- Class<?> cls = obj.getClass();
- Field[] fields = cls.getDeclaredFields();
- for (Field field : fields) {
- Class<?> clsType = field.getType();
- String name = field.getName();
- String strSet = "set" + name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
- Method methodSet = cls.getDeclaredMethod(strSet, clsType);
- if (data.containsKey(name)) {
- Object objValue = typeConversion(clsType, data.get(name));
- methodSet.invoke(obj, objValue);
- }
- }
- return obj;
- }
- /**
- * 把对象的值用Map对应装起来
- *
- * @param map
- * Map<String,String>
- * @param obj
- * Object
- * @return 与对象属性对应的Map Map<String,String>
- */
- public static Map<String, String> compareMap(Map<String, String> map, Object obj) {
- Map<String, String> mapValue = new HashMap<String, String>();
- Field[] fields = obj.getClass().getDeclaredFields();
- for (Field field : fields) {
- String name = field.getName();
- if (map.containsKey(name)) {
- mapValue.put(name, map.get(name));
- }
- }
- return mapValue;
- }
- /**
- * 把临时对象的值复制到持久化对象上
- *
- * @param oldObject
- * Object 持久化对象
- * @param newObject
- * Object 临时对象
- * @return 持久化对象
- * @throws Exception
- */
- public static Object mergedObject(Object oldObject, Object newObject) throws Exception {
- Class<?> cls = newObject.getClass();
- Field[] fields = cls.getDeclaredFields();
- for (Field field : fields) {
- Class<?> clsType = field.getType();
- String name = field.getName();
- String method = name.substring(0, 1).toUpperCase() + name.substring(1, name.length());
- String strGet = "get" + method;
- Method methodGet = cls.getDeclaredMethod(strGet);
- Object object = methodGet.invoke(newObject);
- if (object != null) {
- String strSet = "set" + method;
- Method methodSet = cls.getDeclaredMethod(strSet, clsType);
- Object objValue = typeConversion(clsType, object.toString());
- methodSet.invoke(oldObject, objValue);
- }
- }
- return oldObject;
- }
- public static Object typeConversion(Class<?> cls, String str) {
- Object obj = null;
- String nameType = cls.getSimpleName();
- if ("Integer".equals(nameType)) {
- obj = Integer.valueOf(str);
- }
- if ("String".equals(nameType)) {
- obj = str;
- }
- if ("Float".equals(nameType)) {
- obj = Float.valueOf(str);
- }
- if ("Double".equals(nameType)) {
- obj = Double.valueOf(str);
- }
- if ("Boolean".equals(nameType)) {
- obj = Boolean.valueOf(str);
- }
- if ("Long".equals(nameType)) {
- obj = Long.valueOf(str);
- }
- if ("Short".equals(nameType)) {
- obj = Short.valueOf(str);
- }
- if ("Character".equals(nameType)) {
- obj = str.charAt(1);
- }
- return obj;
- }
- }