超轻量级对象复制转换-比dozer快100倍
来源:互联网 发布:sai for mac 无压感 编辑:程序博客网 时间:2024/04/29 16:11
之前项目里面一直在用dozer,后来遇到性能瓶颈问题,一查看发现dozer复制一个对象居然用了0.2秒 看来是不能用了,dozer 虽然强大,但我用的都只是很简单的功能,就对象的复制转换,于是就自己用反射写了个复制方法,结果发现性能提升了好多好多。。
话不多说,上代码,下面是方法的代码:
/** * * @param obj 转换源对象 * @param toObj 转换类型 * @param <T> 转换结果 * @return * @throws Exception */ private <T> T objSimpleConvert(Object obj,Class<T> toObj)throws Exception{ T toObjIns = (T)toObj.newInstance(); //创建目标对象实例 Class sourCls = obj.getClass(); //遍历源属性 do{ Field[] sourFlds = sourCls.getDeclaredFields(); //源属性集 for(int i = 0 ; i < sourFlds.length; i++){ //遍历源所有属性 Field sf = sourFlds[i]; sf.setAccessible(true);// System.out.println(sf.getName()); //遍历目标所有属性 Class toCls = toObj; do{ Field[] toFlds = toCls.getDeclaredFields(); //源属性集 for(int j = 0 ; j < toFlds.length; j++){ //遍历源所有属性 Field tof = toFlds[j]; tof.setAccessible(true); if(sf.getName().equals(tof.getName())){ //属性名字相同 String type = tof.getType().toString();//得到此属性的类型 if (type.endsWith("String")) { tof.set(toObjIns,(String)sf.get(obj)); }else if(type.endsWith("int") || type.endsWith("Integer")){ tof.set(toObjIns,(Integer)sf.get(obj)); }else if(type.endsWith("Date")){ tof.set(toObjIns,(Date)sf.get(obj)); }else if(type.endsWith("long") || type.endsWith("Long")){ tof.set(toObjIns,(Long)sf.get(obj)); }else if(type.endsWith("short") || type.endsWith("Short")){ tof.set(toObjIns,(Short)sf.get(obj)); }else { log.error("类型转换失败!"); throw new Exception("类型转换失败!"); } } } toCls = toCls.getSuperclass(); }while(toCls != Object.class); } sourCls = sourCls.getSuperclass(); }while(sourCls != Object.class); return toObjIns; }
附录一张我自己测试的结果图:
0 0
- 超轻量级对象复制转换-比dozer快100倍
- YOLO比R-CNN快1000倍,比Fast R-CNN快100倍的实时对象检测
- dozer比beanUtills更健壮的对象转换工具
- 对象转换利器之Dozer
- Dozer数据对象转换神器
- 对象转换利器之Dozer
- Dozer轻松实现对象间属性复制
- Dozer轻松实现对象间属性复制
- curl_multi_init比curl_init快30倍
- Release 版比 Debug 快近100倍(Vc.net2003),开销在哪里
- 谷歌公布内部数据语言 速度比XML快100倍
- 谷歌发布内部数据语言 比XML快近100倍
- 谷歌公布内部数据语言 速度比XML快100倍
- 谷歌公布内部数据语言 速度比XML快100倍
- 试用GOOGLE PROTOCOL BUFFERS( 比XML快20~100倍, 支持序列化数据 )
- 谷歌在美发布光纤宽带网络:比传统网络快100倍
- Oracle称其最新内存数据库比对手快100倍
- 荷兰研究人员提突破性想法:用红外线传输网络_比WiFi快100倍
- iOS折线图
- Jsoncpp简介
- Android基础入门教程——7.3.3 Android 文件下载(2)
- 网络传输笔记 二
- Spring 3 MVC hello world example – Annotation
- 超轻量级对象复制转换-比dozer快100倍
- minmax
- Lua程序设计:第5章 函数
- CAS单点登录(SSO)完整教程
- Logger类
- python Queue
- ubuntu下设置Iptables在重启后自动生效
- 面试金典之(一)找出和为SUM的递增数组array中的两个数使之乘积最小
- android声音调整源代码分析