zoukankan      html  css  js  c++  java
  • 反射将对象所有属性(含集合中所有属性)中字符串类型做trim()

    通过反射将对象所有属性(含属性为集合类型中的所有属性)中字符串类型做trim()处理

    public class FieldUtils {
        /**
         * 字符串 字符 去除 首位空格
         *
         * @param model
         * @throws Exception
         */
        public static void removeSpace(Object model) throws Exception {
            Class clazz = model.getClass();
            Field[] fields = clazz.getDeclaredFields();
            for (Field field : fields) {
                if (!field.isAccessible()) {
                    field.setAccessible(true);
                }
    
                //如果为字符串类型
                if (field.getGenericType().toString().equals("class java.lang.String")) {
                    Method getMethod = clazz.getMethod("get" + getMethodName(field.getName()));
                    String value = (String) getMethod.invoke(model);// 调用getter方法获取属性值
                    if (StringUtils.isNotBlank(value)) {
                        value = value.trim();
                        field.setAccessible(true);
                        field.set(model, value);
                    }
                }
                //如果为集合类型
                if (List.class.isAssignableFrom(field.getType())) {
                    Type t = field.getGenericType();
                    if (t instanceof ParameterizedType) {
                        Object object = field.get(model);
                        if (ObjectUtil.isEmpty(object)) {
                            continue;
                        }
                        Class clazz1 = object.getClass();//获取到属性的值的Class对象
                        Method m = clazz1.getDeclaredMethod("size");
                        int size = (Integer) m.invoke(field.get(model));//调用list的size方法,得到list的长度
                        for (int i = 0; i < size; i++) {//遍历list,调用get方法,获取list中的对象实例
                            Method getM = clazz1.getDeclaredMethod("get", int.class);
                            if (!getM.isAccessible()) {
                                getM.setAccessible(true);
                            }
                            removeSpace(getM.invoke(field.get(model), i));
                        }
                    }
                }
            }
        }
    
        /**
         * 返回首字母大写
         *
         * @param fildeName
         * @return
         * @throws Exception
         */
        private static String getMethodName(String fildeName) throws Exception {
            byte[] items = fildeName.getBytes();
            items[0] = (byte) ((char) items[0] - 'a' + 'A');
            return new String(items);
        }
    }
  • 相关阅读:
    Android服务之bindService源代码分析
    [iOS 高级] iOS远程推送与本地推送大致流程
    redis集群
    面试你之前,我希望在简历上看到这些!
    解决安卓出现导入第三方包反复的错误
    【PA2012】【BZOJ4289】Tax
    Spark jdbc postgresql数据库连接和写入操作源代码解读
    Java中hashcode的理解
    CvArr、Mat、CvMat、IplImage、BYTE转换
    CSDN日报20170413 ——《天天写业务代码的那些年,我们是怎样成长过来的》
  • 原文地址:https://www.cnblogs.com/yifanSJ/p/15224315.html
Copyright © 2011-2022 走看看