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