无意间,看到项目中封装得找个工具类,感觉很好用,记录下,方便以后得项目可以随时使用:嘿嘿嘿。。。。。。。。。。。。

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));
            }
        }
    }
}

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));}}}}

12-27 10:09
查看更多