电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

java反射機(jī)制給實(shí)體類相同字段自動(dòng)賦值實(shí)例

瀏覽:112日期:2022-08-26 15:34:25

一、封裝一個(gè)工具類

1、簡易版

package net.aexit.construct.acceptance.websky.utils;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class ClassReflection { /** * @param class1 用于賦值的實(shí)體類 * @param class2 需要待賦值的實(shí)體類 * 描述:反射實(shí)體類賦值 */ public static void reflectionAttr(Object class1,Object class2) throws Exception{ Class clazz1 = class1.getClass(); Class clazz2 = class2.getClass(); // 獲取兩個(gè)實(shí)體類的所有屬性 Field[] fields1 = clazz1.getDeclaredFields(); Field[] fields2 = clazz2.getDeclaredFields(); // 遍歷class1Bean,獲取逐個(gè)屬性值,然后遍歷class2Bean查找是否有相同的屬性,如有相同則賦值 for (Field f1 : fields1) { if(f1.getName().equals('id')) continue; //設(shè)置訪問權(quán)限 f1.setAccessible(true); Object value = f1.get(class1); for (Field f2 : fields2) { if(f1.getName().equals(f2.getName())){ //設(shè)置訪問權(quán)限 f2.setAccessible(true); f2.set(class2,value); } } } } }

2、復(fù)雜版

package net.utils;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class ClassReflection { /** * @param class1 用于賦值的實(shí)體類 * @param class2 需要待賦值的實(shí)體類 * 描述:反射實(shí)體類賦值 */ public static void reflectionAttr(Object class1,Object class2) throws Exception{ Class clazz1 = Class.forName(class1.getClass().getName()); Class clazz2 = Class.forName(class2.getClass().getName()); // 獲取兩個(gè)實(shí)體類的所有屬性 Field[] fields1 = clazz1.getDeclaredFields(); Field[] fields2 = clazz2.getDeclaredFields(); ClassReflection cr = new ClassReflection(); // 遍歷class1Bean,獲取逐個(gè)屬性值,然后遍歷class2Bean查找是否有相同的屬性,如有相同則賦值 for (Field f1 : fields1) { if(f1.getName().equals('id')) continue; Object value = cr.invokeGetMethod(class1 ,f1.getName(),null); for (Field f2 : fields2) { if(f1.getName().equals(f2.getName())){ Object[] obj = new Object[1]; obj[0] = value; cr.invokeSetMethod(class2, f2.getName(), obj); } } } } /** * * 執(zhí)行某個(gè)Field的getField方法 * @param clazz 類 * @param fieldName 類的屬性名稱 * @param args 參數(shù),默認(rèn)為null * @return */ public Object invokeGetMethod(Object clazz, String fieldName, Object[] args) { String methodName = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1); Method method = null; try { method = Class.forName(clazz.getClass().getName()).getDeclaredMethod('get' + methodName); return method.invoke(clazz); } catch (Exception e) { e.printStackTrace(); return ''; } } /** * * 執(zhí)行某個(gè)Field的setField方法 * @param clazz 類 * @param fieldName 類的屬性名稱 * @param args 參數(shù),默認(rèn)為null * @return */ public Object invokeSetMethod(Object clazz, String fieldName, Object[] args) { String methodName = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1); Method method = null; try { Class[] parameterTypes = new Class[1]; Class c = Class.forName(clazz.getClass().getName()); Field field = c.getDeclaredField(fieldName);parameterTypes[0] = field.getType(); method = c.getDeclaredMethod('set' + methodName,parameterTypes); return method.invoke(clazz,args); } catch (Exception e) { e.printStackTrace(); return ''; } } //map轉(zhuǎn)換為json字符串 public static String hashMapToJson(HashMap map) { String string = '{'; for (Iterator it = map.entrySet().iterator(); it.hasNext();) { Map.Entry e = (Map.Entry) it.next(); string += '’' + e.getKey() + '’:'; string += '’' + e.getValue() + '’,'; } string = string.substring(0, string.lastIndexOf(',')); string += '}'; return string; }}

二、調(diào)用工具類

ClassReflection.reflectionAttr(class1, class2);

三、賦值完成

注意:

1、id不賦值,主要給數(shù)據(jù)庫兩張表賦值,比如當(dāng)前表和歷史表,把當(dāng)前表的相同字段的值賦值給歷史表

2、簡單版設(shè)置private修飾的字段可以被訪問

補(bǔ)充知識:利用java反射原理給實(shí)體類注值

寫一個(gè)通用java注值的方法,使用泛型T,將其封裝在DbHelp中(相信DbHelper不用我解釋是什么),使dao調(diào)用直接獲取所需要的對象,也正應(yīng)用了我們java面向?qū)ο蟮乃枷?/p>

public static<T> T getBean(String sql,Class<T> clazz){ Method[] ms=clazz.getDeclaredMethods(); T t=null; try { t=clazz.newInstance(); for (Method m : ms) {String mn=m.getName();if(mn.startsWith('set')){ Object obj=map.get((mn.replace('set', '').toUpperCase()));//取到set方法對應(yīng)數(shù)據(jù)庫字段的值 String pt=m.getParameterTypes()[0].toString();//取到set方法的參數(shù)類型 if(obj!=null){ if(pt.endsWith('int')||pt.endsWith('Integer')){ m.invoke(t, ((BigDecimal)obj).intValue()); }else if(pt.endsWith('Double')||pt.endsWith('double')){ m.invoke(t, ((BigDecimal)obj).doubleValue()); }else if(pt.endsWith('Date')){ m.invoke(t, (Timestamp)obj); }else { m.invoke(t, obj); } }} } } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } return t;}

以上這篇java反射機(jī)制給實(shí)體類相同字段自動(dòng)賦值實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 高柔性拖链电缆_卷筒电缆_耐磨耐折聚氨酯电缆-玖泰特种电缆 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 噪声治理公司-噪音治理专业隔音降噪公司 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 网站建设-高端品牌网站设计制作一站式定制_杭州APP/微信小程序开发运营-鼎易科技 | 全温恒温摇床-水浴气浴恒温摇床-光照恒温培养摇床-常州金坛精达仪器制造有限公司 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 超声波分散机-均质机-萃取仪-超声波涂料分散设备-杭州精浩 | 智慧食堂_食堂管理系统_食堂订餐_食堂消费系统—客易捷 | 便携式高压氧舱-微压氧舱-核生化洗消系统-公众洗消站-洗消帐篷-北京利盟救援 | 千淘酒店差旅平台-中国第一家针对TMC行业的酒店资源供应平台 | 宁夏档案密集柜,智能密集柜,电动手摇密集柜-盛隆柜业宁夏档案密集柜厂家 | 福州甲醛检测-福建室内空气检测_环境检测_水质检测-福建中凯检测技术有限公司 | 涂层测厚仪_光泽度仪_uv能量计_紫外辐照计_太阳膜测试仪_透光率仪-林上科技 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | 钢制暖气片散热器_天津钢制暖气片_卡麦罗散热器厂家 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | 成都LED显示屏丨室内户外全彩led屏厂家方案报价_四川诺显科技 | 防爆电机_防爆电机型号_河南省南洋防爆电机有限公司 | 定制/定做冲锋衣厂家/公司-订做/订制冲锋衣价格/费用-北京圣达信 | loft装修,上海嘉定酒店式公寓装修公司—曼城装饰 | 电池高低温试验箱-气态冲击箱-双层电池防爆箱|简户百科 | 膜结构车棚|上海膜结构车棚|上海车棚厂家|上海膜结构公司 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 河南正规膏药生产厂家-膏药贴牌-膏药代加工-修康药业集团官网 | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 旋振筛|圆形摇摆筛|直线振动筛|滚筒筛|压榨机|河南天众机械设备有限公司 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | 中视电广_短视频拍摄_短视频推广_短视频代运营_宣传片拍摄_影视广告制作_中视电广 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 智慧消防-消防物联网系统云平台 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 标准件-非标紧固件-不锈钢螺栓-非标不锈钢螺丝-非标螺母厂家-三角牙锁紧自攻-南京宝宇标准件有限公司 | 磁力抛光研磨机_超声波清洗机厂家_去毛刺设备-中锐达数控 | X光检测仪_食品金属异物检测机_X射线检测设备_微现检测 | SMN-1/SMN-A ABB抽屉开关柜触头夹紧力检测仪-SMN-B/SMN-C-上海徐吉 | uv固化机-丝印uv机-工业烤箱-五金蚀刻机-分拣输送机 - 保定市丰辉机械设备制造有限公司 | 冷藏车-东风吸污车-纯电动环卫车-污水净化车-应急特勤保障车-程力专汽厂家-程力专用汽车股份有限公司销售二十一分公司 | 免联考国际MBA_在职MBA报考条件/科目/排名-MBA信息网 |