Java如何获取对象属性及对应值

作者:牛鼻子老赵 时间:2022-03-30 07:03:05 

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

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

标签:Java,获取,对象,属性,值
0
投稿

猜你喜欢

  • C# 抓图服务的实现

    2023-04-03 20:10:12
  • eclipse创建java项目并运行的详细教程讲解

    2022-09-27 20:15:13
  • java8新特性之日期时间API

    2023-06-20 09:15:50
  • Unity排行榜优化滚动效果

    2021-09-08 13:02:07
  • SpringBoot LocalDateTime格式转换方案详解(前端入参)

    2022-01-05 06:48:03
  • C#微信开发之接收 / 返回文本消息

    2021-08-21 14:37:11
  • Android超详细讲解组件LinearLayout的使用

    2023-11-01 01:04:27
  • Android UI设计系列之自定义TextView属性实现带下划线的文本框(4)

    2022-08-11 11:03:29
  • centos下GitLab+Jenkins持续集成环境搭建(安装jenkins)

    2023-05-13 05:02:40
  • Java中Druid连接池连接超时获取不到连接的解决

    2022-09-15 04:49:59
  • java获取百度网盘真实下载链接的方法

    2021-09-07 21:16:08
  • Android RecyclerView使用GridLayoutManager间距设置的方法

    2023-03-20 07:32:44
  • Java String 拼接字符串原理详解

    2023-05-14 10:10:33
  • JAVA中实现原生的 socket 通信机制原理

    2021-08-08 03:06:01
  • 揭秘双十一手机淘宝图标如何被动态更换

    2022-06-05 20:14:04
  • Java 超详细讲解类的定义方式和对象的实例化

    2021-09-11 17:38:29
  • Android studio开发实现计算器功能

    2022-02-12 19:43:05
  • SpringBoot之如何指定配置文件启动

    2023-11-17 15:17:48
  • Android实现指针刻度转盘

    2022-06-08 07:41:42
  • springboot整合@Retryable实现重试功能的示例代码

    2023-11-27 11:08:20
  • asp之家 软件编程 m.aspxhome.com