zoukankan      html  css  js  c++  java
  • Java 获取对象的所有属性及其对应的值

    利用反射获取对象的所有属性及对应的值

    1、获取属性名数组

        private static String[] getFiledName(Object o) {
            Field[] fields = o.getClass().getDeclaredFields();
            String[] fieldNames = new String[fields.length];
            for (int i = 0; i < fields.length; i++) {
                fieldNames[i] = fields[i].getName();
            }
            return fieldNames;
        }

    2、根据属性名获取属性值

        private static Object getFieldValueByName(String fieldName, Object o) {
            try {
                String firstLetter = fieldName.substring(0, 1).toUpperCase();
                String getter = "get" + firstLetter + fieldName.substring(1);
                Method method = o.getClass().getMethod(getter, new Class[] {});
                Object value = method.invoke(o, new Object[] {});
                return value;
            } catch (Exception e) {
                logger.error("获取属性值失败!" + e, e);
            }
            return null;
        }

    3、获取属性的数据类型

        private static Object getFiledType(String fieldName, Object o) {
            Field[] fields = o.getClass().getDeclaredFields();
            for (Field field : fields) {
                if (Objects.equals(fieldName, field.getName())) {
                    return field.getType();
                }
            }
            return null;
        }

    4、完整代码及其引入的包

    package com.hao.search;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Objects;
    import org.apache.commons.collections.CollectionUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import com.google.common.base.Joiner;
    
    public class ObjectPaseUtils {
    
        private static Logger logger = LoggerFactory.getLogger(ObjectPaseUtils.class);
    
        /**
         * @desc 将对象转换成指定String
         * @param <T>
         * @param t
         * @return
         */
        public static <T> String objectToStr(T t) {
            List<String> list = new ArrayList<String>();
            String[] fieldNames = getFiledName(t);
            for (int i = 0; i < fieldNames.length; i++) {
                String name = fieldNames[i];
                Object value = getFieldValueByName(name, t);
                if (null != value) {
                    if (getFiledType(name, t).equals(Date.class)) {
                        value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date)value);
                    }
                    list.add(name + " : " + value);
                }
            }
            if (CollectionUtils.isNotEmpty(list)) {
                return Joiner.on("
    ").skipNulls().join(list);
            }
            return null;
        }
    
        /**
         * @desc 获取属性名数组
         * @param o
         * @return
         */
        private static String[] getFiledName(Object o) {
            Field[] fields = o.getClass().getDeclaredFields();
            String[] fieldNames = new String[fields.length];
            for (int i = 0; i < fields.length; i++) {
                fieldNames[i] = fields[i].getName();
            }
            return fieldNames;
        }
    
        /**
         * @desc 根据属性名获取属性值
         * @param fieldName
         * @param o
         * @return
         */
        private static Object getFieldValueByName(String fieldName, Object o) {
            try {
                String firstLetter = fieldName.substring(0, 1).toUpperCase();
                String getter = "get" + firstLetter + fieldName.substring(1);
                Method method = o.getClass().getMethod(getter, new Class[] {});
                Object value = method.invoke(o, new Object[] {});
                return value;
            } catch (Exception e) {
                logger.error("获取属性值失败!" + e, e);
            }
            return null;
        }
    
        /**
         * @desc 获取属性的数据类型
         * @param fieldName
         * @param o
         * @return
         */
        private static Object getFiledType(String fieldName, Object o) {
            Field[] fields = o.getClass().getDeclaredFields();
            for (Field field : fields) {
                if (Objects.equals(fieldName, field.getName())) {
                    return field.getType();
                }
            }
            return null;
        }
    
    }
    View Code
  • 相关阅读:
    高速排序(递归与分治的思想)
    silverlight wcf mvvm
    黑龙江绿色食品青年电商销售大赛开幕,绿色巨人最终发力做电商了
    ecnu 1244
    可穿戴KEY带来的身份认证的革命
    深入理解7816(3)-----关于T=0 【转】
    深入理解7816(1)---- 关于F/D和etu【转】
    深入理解7816(2)---关于ATR【转】
    [Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程
    Ubuntu16.04下搭建开发环境及编译tiny4412 Android系统【转】
  • 原文地址:https://www.cnblogs.com/zhanh247/p/12220791.html
Copyright © 2011-2022 走看看