無意間,看到項目中封裝得找個工具類,感覺很好用,記錄下,方便以后得項目可以隨時使用:嘿嘿嘿。。。。。。。。。。。。
package com.xyebank.hzx.core.util; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ReflectionUtil { private static Logger logger = LoggerFactory.getLogger(ReflectionUtil.class); /** * *通過反射的方式調用對象方法 * @param object 服務對象 * @param methodName 調用方法 * @param args 方法參數(具有順序性) */ public static void invokeMethod(Object object, String methodName, Object[] args) throws Exception { logger.debug(" invokeMethod start : 服務對象={},調用方法={} ",new Object[]{object,methodName}); Class<?>[] paramClasses = null; if(!CommonUtils.isNullOrEmpty(args)) { paramClasses = new Class<?>[args.length]; for(int i=0;i<args.length;i++) { paramClasses[i] = args[i].getClass(); } } Method method = object.getClass().getMethod(methodName, paramClasses); method.setAccessible(true); method.invoke(object, args); logger.debug(" invokeMethod end "); } /** * *map轉Object,同名屬性賦值 * @param map * @param beanClass * @return * @throws Exception */ public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception { if (map == null) { return null; } Object obj = beanClass.newInstance(); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { int mod = field.getModifiers(); if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) { continue; } field.setAccessible(true); Object value = map.get(field.getName()); if(value == null) { continue; } String valueStr = String.valueOf(value); String type = field.getGenericType().toString(); if(type.toLowerCase().contains("string")) { field.set(obj, valueStr); } if(type.toLowerCase().contains("int") && NumberValidationUtils.isWholeInteger(valueStr)) { field.set(obj, Integer.valueOf(valueStr)); } if(type.toLowerCase().contains("long") && NumberValidationUtils.isWholeInteger(valueStr)) { field.set(obj, Long.valueOf(valueStr)); } if(type.toLowerCase().contains("double") && NumberValidationUtils.isRealNumber(valueStr)) { field.set(obj, Double.valueOf(valueStr)); } if(type.toLowerCase().contains("boolean")) { field.set(obj, Boolean.valueOf(valueStr)); } if(type.toLowerCase().contains("float") && NumberValidationUtils.isRealNumber(valueStr)) { field.set(obj, Float.valueOf(valueStr)); } if(type.toLowerCase().contains("byte") && NumberValidationUtils.isWholeInteger(valueStr)) { field.set(obj, Byte.valueOf(valueStr)); } if(type.toLowerCase().contains("short") && NumberValidationUtils.isWholeInteger(valueStr)) { field.set(obj, Short.valueOf(valueStr)); } if(type.toLowerCase().contains("char") && NumberValidationUtils.isWholeInteger(valueStr)) { String str = String.valueOf(valueStr); if(str.length()==1) { field.set(obj, Character.valueOf(String.valueOf(value).charAt(0))); } } //TODO 如果有其他類型,自行添加 } return obj; } /** * *object轉map,同名屬性賦值 * @param obj * @return * @throws Exception */ public static Map<String, Object> objectToMap(Object obj) throws Exception { if (obj == null) { return null; } Map<String, Object> map = new HashMap<String, Object>(); Field[] declaredFields = obj.getClass().getDeclaredFields(); for (Field field : declaredFields) { int mod = field.getModifiers(); if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) { continue; } field.setAccessible(true); map.put(field.getName(), field.get(obj)); } return map; } /** * *將新對象的值賦給舊對象 * @param old 舊對象 * @param ne 新對象 * @param fieldsOut 過濾屬性 * @throws Exception */ public static void copyFieldWithOut(Object old, Object ne, String[] fieldsOut) throws Exception { Class<?> clazz = old.getClass(); if (!clazz.getName().equals(ne.getClass().getName())) { return; } List<String> outList = new ArrayList<String>(); if (fieldsOut != null) { outList = Arrays.asList(fieldsOut); } Field[] fields = clazz.getDeclaredFields(); for (Field f : fields) { int mod = f.getModifiers(); if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) { continue; } if (!outList.contains(f.getName())) { f.setAccessible(true); f.set(old, f.get(ne)); } } } /** * *將新對象的值賦給舊對象 * @param old 舊對象 * @param ne 新對象 * @param fieldsIn 包含屬性 * @throws Exception */ public static void copyFieldWithIn(Object old, Object ne, String[] fieldsIn) throws Exception { Class<?> clazz = old.getClass(); if (!clazz.getName().equals(ne.getClass().getName())) { return; } List<String> inList = new ArrayList<String>(); if (fieldsIn != null) { inList = Arrays.asList(fieldsIn); } Field[] fields = clazz.getDeclaredFields(); for (Field f : fields) { int mod = f.getModifiers(); if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) { continue; } if (inList.contains(f.getName())) { f.setAccessible(true); f.set(old, f.get(ne)); } } } }