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("\r").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;
    }

}

原文地址:https://www.cnblogs.com/zhanh247/p/12220791.html

时间: 2024-10-04 10:53:35

Java 获取对象的所有属性及其对应的值的相关文章

java获取对象属性类型、属性名称、属性值

因为项目需要用到,于是简单封装了一些常用的操作: [java] view plaincopy /** * 根据属性名获取属性值 * */ private Object getFieldValueByName(String fieldName, Object o) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + field

获取对象的所有属性&amp;&amp;获取对象的所有方法

#import <objc/runtime.h> @implementation NSObject (PropertyListing) /* 获取对象的所有属性 */ - (NSDictionary *)properties_aps { NSMutableDictionary *props = [NSMutableDictionarydictionary]; unsigned int outCount, i; objc_property_t *properties = class_copyPr

怎样获取对象的所有属性

使用Object.keys()可以获取对象本身所有的可遍历属性; 使用Object.getOwnPropertyNames()可以获取对象本身所有属性, 不管是否可遍历; 使用for...in...循环可以获取对象所有可遍历属性, 包括本身的属性和继承的属性; 使用下面的函数可以获取对象的所有属性, 不管是本身还是继承, 不管是可遍历还是不可遍历: function inheritedPropertyNames(obj) { var props = {}; while(obj) { Object

Java 获取对象全部属性 包括 父类属性

今天由于业务需要,看一段数据库中的表转化成用户可以看懂的数据,也就是把一些字段比如Date用ms存的,转化为'yyyy-MM-dd'这种格式,但是由于字段太多,所以利用Java反射机制自带的BeanUtils相关的方法来进行转化(要求两个类的属性名称相同),当然这个方法只支持基本数据类型,如Long,Integer,String,Short之类的转化,但是像Date类型就需要自己手动判断来转,这就出现了今天所遇到的坑 先看下反射机制是如何获取类的方法的: Class clazz = object

【转】js获取对象的所有属性和方法

//有时候需要知道一个js对像的所有属性和方法来帮助调试,下面是再网上找到的一个比较给力的方法 function displayProp(obj){ var names=""; for(var name in obj){ names+=name+": "+obj[name]+", "; } alert(names); } 转自 http://blog.csdn.net/clh604/article/details/8233812

java 获取json字符串中key对应的值

用到了Gson的JsonParser maven项目引入 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.3</version></dependency> 也可以直接去这个网址下载jar包 https://mvnrepository.com/artifact/com.g

JAVA获取oracle中sequences的最后一个值

项目中,用到一个序列作单号,框架用的是ssh,在dao层去拿的时候,运行时报错为dual is not mapped,[select *.nextval nextvalue from dual] 后来检查发现,获取方式不对,于是改成下面这样,就可以正常获取了 //获取seq的最后一个值 public String findSeq(){ try { String sql = "select PATIENT_SEQ.nextval nextvalue from dual"; Integer

Python快速学习-获取对象信息

1type() 获取对象的基本类型,判断两个对象类型. 2types 判断对象是否是函数,使用前要引入import types 3isinstance() 判断class类型,判断一个变量是否是某种类型中的一种,基本上能用type判断,都可以用isinstance. 4.dir() 获取对象的所有属性和方法.

【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; private String name; private Boolean flag; public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getNam