午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

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

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

瀏覽:184日期: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)文章:
主站蜘蛛池模板: www,黄色| 亚洲国产一二三 | 麻豆理论片 | 免费a级黄色片 | 欧美国产精品一区 | china激情老汉69老头乐 | 国产精品久久一区二区三区 | 超碰2023| 国产一区二区视频免费 | 国产高清视频在线观看 | 色悠悠久久 | 日韩video| 中文免费视频 | 亚洲精品入口 | 特级西西444www高清大胆 | 亚洲欧洲在线观看 | 毛片视频免费播放 | 国产精品18久久久 | 夜夜狠狠 | 97人人艹 | 9999久久久久 | 日韩伦乱视频 | 操国产美女 | 亚洲欧洲日本国产 | 国产又粗又黄又爽的视频 | 欧美黄色短片 | 欧美在线免费播放 | 少妇性高潮视频 | 欧美成在线观看 | 日本亚洲色图 | 午夜三级影院 | 欧美一区二区大片 | 欧美一级淫片免费视频黄 | 超碰导航| 青青视频国产 | 精品久久久久久亚洲精品 | 日本大尺度吃奶做爰久久久绯色 | 神马久久精品 | 久久久综合久久久 | 久久久免费精品视频 | 久久麻豆精品 |