一、前言
定义DTOUtils传值对象工具类,对dto类的属性名称对应值得Map转为目标对象(Map转对象)处理示例,详情参见代码示例。
二、代码示例
import java.lang.reflect.Constructor;@b@import java.lang.reflect.Field;@b@import java.util.HashMap;@b@import java.util.Map;@b@@b@public class DTOUtils {@b@ @b@ /**@b@ * 将class的属性值Map实例化目标对象@b@ * @param <T>@b@ * @param params@b@ * @param classz@b@ * @return@b@ * @throws Exception@b@ */@b@ public static <T> T bulidFromMap(Map<String, Object> params, Class<?> classz) throws Exception {@b@ Constructor constructor = classz.getConstructor(new Class[0]);@b@ Object targetObj = constructor.newInstance(new Object[0]);@b@@b@ Field[] fields = classz.getDeclaredFields();@b@ Field[] arr$ = fields;@b@ int len$ = arr$.length;@b@ for (int i$ = 0; i$ < len$; ++i$) {@b@ Field field = arr$[i$];@b@ String name = field.getName();@b@ Object paramValue = params.get(name);@b@ if (paramValue != null) {@b@ field.setAccessible(true);@b@ field.set(targetObj, paramValue);@b@ }@b@ }@b@ return (T) targetObj;@b@ }@b@@b@ public static class ClassDTO {@b@ @b@ private String no;@b@ private String cName;@b@@b@ public String getNo() {@b@ return no;@b@ }@b@@b@ public void setNo(String no) {@b@ this.no = no;@b@ }@b@@b@ public String getcName() {@b@ return cName;@b@ }@b@@b@ public void setcName(String cName) {@b@ this.cName = cName;@b@ }@b@@b@ @Override@b@ public String toString() {@b@ return this.getClass().getName()+"@【no="+no+";cName="+cName+";hashCode="+this.hashCode()+"】";@b@ }@b@ @b@ }@b@@b@ public static void main(String[] args) throws Exception {@b@ @b@ Map<String,Object> fieldVals=new HashMap<String,Object>();@b@ fieldVals.put("no", "601");@b@ fieldVals.put("cName","六年级一班");@b@ @b@ System.out.println(bulidFromMap(fieldVals,ClassDTO.class));;@b@@b@ }@b@}
控制台输出结果
dto.DTOUtils$ClassDTO@【no=601;cName=六年级一班;hashCode=21174459】