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

网友投稿 468 2022-11-14


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

* @param t

* @return

*/

public static String objectToStr(T t) {

List list = new ArrayList();

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++) {

fieldNamehttp://s[i] = fields[i].getName();

}

return fieldNames;

}

/**

* @desc 根据属性名获取属性值

* @param fieldName

* @param o

* @return

http:// */

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) {

loggkNGYDer.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;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:线程池ThreadPoolExecutor并行处理实现代码
下一篇:基于newFixedThreadPool实现多线程案例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~