前言: 当对象的属性过多时,通过一个一个get很影响效率,同时看代码也不方便,利用反射原理,可以解决这个问题。
对象中,成员变量可能有String,int,double,关键是当包含了List,Map此类集合的成员变量,这种集合类的成员变量要如何去赋值呢?
先不考虑具体的实现,我们先定义方法头,public void(Map map,Object object)
方法体应该是具体的操作了,放上我实现的方法体吧
/**
* 根据map给值对象赋值,要赋值的字段由map指定
*/
public static void mapToObject(Map<String,Object> map,Object o){
ReflectUtil util = new ReflectUtil();
util.registerClass(o.getClass());
Iterator<Entry<String, Object>> iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String,Object> entry = (Map.Entry<String,Object>) iter.next();
String key = (String) entry.getKey();
Object val = entry.getValue();
util.setValue(key, val, o);
}
}
简而言之,就是遍历Map去获取map中设定的字段和值的对应,然后通过ReflectUtil 根据反射去设置对象的属性值
package com.shenzhenair.util;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
im