Java如何獲取對象屬性及對應值
更新時間:2020年11月10日 10:05:04 作者:牛鼻子老趙
這篇文章主要介紹了Java如何獲取對象屬性及對應值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
利用反射獲取對象的所有屬性及對應的值
1、獲取屬性名數(shù)組
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、根據(jù)屬性名獲取屬性值
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、獲取屬性的數(shù)據(jù)類型
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 將對象轉(zhuǎn)換成指定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 獲取屬性名數(shù)組
* @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 根據(jù)屬性名獲取屬性值
* @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 獲取屬性的數(shù)據(jù)類型
* @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;
}
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java?IO篇之Reactor?網(wǎng)絡模型的概念
Reactor?模式也叫做反應器設計模式,是一種為處理服務請求并發(fā)提交到一個或者多個服務處理器的事件設計模式,Reactor?模式主要由?Reactor?和處理器?Handler?這兩個核心部分組成,本文給大家介紹Java?IO篇之Reactor?網(wǎng)絡模型的概念,感興趣的朋友一起看看吧2022-01-01
Java 多線程并發(fā)AbstractQueuedSynchronizer詳情
這篇文章主要介紹了Java 多線程并發(fā)AbstractQueuedSynchronizer詳情,文章圍繞主題展開想象的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-06-06
Java之HashMap.values()轉(zhuǎn)List時的錯誤和正確演示
這篇文章主要介紹了Java之HashMap.values()轉(zhuǎn)List時的錯誤和正確演示,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03

