import android.databinding.BaseObservable;
import android.text.TextUtils;
import android.util.Log;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class EntityUtils {
public static ConcurrentHashMap<String, ConcurrentHashMap<String, Method>[]> classGetAndSetMethodMap = new ConcurrentHashMap<>();
/**
* 调用Class的get方法取出数据,并调用接收数据对象的set方法赋值
*
* @param object
* @param resultObject
* @param <T>
*/
public static <T extends IEntity> void resolveAllFieldsSet(final T object, T resultObject) {
if (null == object || null == resultObject) {
return;
}
Class cls = resultObject.getClass();
ConcurrentHashMap<String, Method>[] concurrentHashMapArray = searchGetAndSetMethods(cls);
Iterator<Map.Entry<String, Method>> iterator = concurrentHashMapArray[0].entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, Method> entry = iterator.next();
String fieldName = entry.getKey();
Method getMethod = entry.getValue();
Method setMethod = concurrentHashMapArray[1].get(fieldName);
if (null == setMethod || null == getMethod) {
continue;
}
try {
Object fieldVal = getMethod.invoke(resultObject, new Object[]{});
setMethod.invoke(object, fieldVal);
} catch (Exception e) {
continue;
}
}
}
/**
* 遍历class的get&set方便,并存入数组中缓存
*
* @param cls
* @return
*/
private static ConcurrentHashMap<String, Method>[] searchGetAndSetMethods(Class<?> cls) {
String className = cls.getName();
ConcurrentHashMap<String, Method>[] getSetMethodArray = null;
getSetMethodArray = classGetAndSetMethodMap.get(className);
if (null == getSetMethodArray) {
ConcurrentHashMap<String, Method> getMethodsMap = new ConcurrentHashMap<>();
ConcurrentHashMap<String, Method> setMethodsMap = new ConcurrentHashMap<>();
Method[] methods = cls.getDeclaredMethods();
for (Method method : methods) {
try {
Java 对象反射赋值工具类
最新推荐文章于 2023-08-21 10:23:49 发布
本文介绍了一个Java工具类,它利用反射机制实现对对象属性的动态赋值,增强了代码的灵活性和可维护性。通过此类,开发者可以在运行时根据需求设置对象的任意属性,无需预先硬编码。
摘要由CSDN通过智能技术生成