zoukankan      html  css  js  c++  java
  • java中对象转换工具类,很好用

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

    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));
                }
            }
        }
    }
  • 相关阅读:
    毕业论文(设计)开题报告
    jqgrid工作记录1(单元格内容过长三个点显示,表头自动换行,取消滚动条预留空间)
    mysql递归查询(父级,子集)
    ORACLE--SQL日常问题和技巧2(自定义排序,递归查询,异常ORA-01747,逗号隔开的字符串转成in条件,用符号连接表中某字段)
    随机图片获取api
    ubuntu16.04下安装Qt5.9
    Ubuntu16.04更换下载源(图形界面更改)
    VM虚拟机黑屏,但是在运行状态的解决方法之一
    Ubuntu终端快捷复制粘贴
    VIM的部分配置()
  • 原文地址:https://www.cnblogs.com/zblwyj/p/12144722.html
Copyright © 2011-2022 走看看