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
投稿
猜你喜欢
Java中LinkedList和ArrayList的效率分析
2023-02-12 06:21:55
Java解码H264格式视频流中的图片
2023-11-24 23:58:24
Idea2020.2创建JavaWeb项目(部署Tomcat)方法详解
2023-11-02 13:29:52
SpringBoot2.0解决Long型数据转换成json格式时丢失精度问题
2022-10-31 16:56:24
详解Java程序启动时-D指定参数是什么
2021-10-22 07:35:34
详解java中String、StringBuilder、StringBuffer的区别
2023-06-17 06:03:23
IDEA 2022 中的Lombok 使用基础教程
2023-04-09 21:57:09
重写hashCode()和equals()方法详细介绍
2023-11-24 16:13:33
springcloud LogBack日志使用详解
2021-12-23 15:17:05
mybatis 查询返回Map<String,Object>类型
2023-11-14 07:06:09
java实现文件夹解压和压缩
2022-06-07 03:00:39
nacos中的配置使用@Value注解获取不到值的原因及解决方案
2023-11-29 13:43:00
Java8中LocalDateTime与时间戳timestamp的互相转换
2023-11-10 05:20:21
Java实现双向循环链表
2023-11-08 04:14:40
Springboot2.x+ShardingSphere实现分库分表的示例代码
2023-11-26 01:34:07
Java二维数组查找功能代码实现
2023-01-04 19:47:17
详解Java并发包中线程池ThreadPoolExecutor
2022-03-23 19:57:20
详解Java对象结构与对象锁的升级
2021-12-05 16:18:38
Java实现根据模板自动生成新的PPT
2022-10-22 18:31:31
SpringMvc微信支付回调示例代码
2023-01-24 08:00:03