Java如何获取对象属性及对应值
时间:2021-10-31 08:46:31|栏目: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;
}
}
上一篇:springboot2.1.7整合thymeleaf代码实例
栏 目:JAVA代码
本文标题:Java如何获取对象属性及对应值
本文地址:http://www.codeinn.net/misctech/181948.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




