Java 获取对象的所有属性及其对应的值

Posted 牛鼻子老赵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Java 获取对象的所有属性及其对应的值的主要内容,如果未能解决你的问题,请参考以下文章

java中把json怎么转换成数组

java中把json怎么转换成数组?

使用 Java 8 Streams 从列表中仅获取所需的对象

angularjs怎么遍历每个对象的属性的值

c# 如何通过反射 获取属性值

java对象值的copy