日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java反射 - 2(对象复制,父类域,内省)

發布時間:2025/4/14 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java反射 - 2(对象复制,父类域,内省) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么要復制對象?假設有個類Car,包含name,color2個屬性,那么將car1對象復制給car2對象,只需要car2.setName(car1.getName)與car2.setColor(car1.getColor)兩部操作即可。

實際項目中有很多類都有超過幾十個,甚至上百個字段,這時如果采用以上方式,將會有很大的代碼工作量與重復勞動。解決方法是使用反射機制。

首先有2個類如下

1 /** 2 * Created by yesiming on 16-11-19. 3 */ 4 public class Car { 5 private String name; 6 private String color; 7 // 省略set/get 8 } 9 } 1 /** 2 * Created by yesiming on 16-11-20. 3 */ 4 public class Kia extends Car{ 5 private String model; 6 // 省略set/get 7 }

我們先操作入職Kia的域

1 /** 2 * 通過反射進行對象復制(漏洞:不能復制父類中的域) 3 * @throws Exception 4 */ 5 @Test 6 public void copyObject() throws Exception{ 7 User src = new User(); // 源對象 8 src.setId(1); 9 src.setName("yesiming"); 10 User target = new User(); // 目標對象 11 Class clazz = User.class; 12 Field[] fields = clazz.getDeclaredFields(); // 得到該類聲明的域(不包含父類的域) 13 for(Field field : fields) { 14 if(!field.isAccessible()) 15 field.setAccessible(true); // 設置可訪問 16 field.set(target, field.get(src)); // 從源對象get值set到目標對象 17 } 18 // 輸出顯示 19 for(Field field : fields) { 20 System.out.println(field.get(target)); 21 } 22 }

由于getDeclaredFields方法不能得到超類中的域,所以上述操作有缺陷,甚至不具有實際意義

下面是如何得到超類中的域,使用遞歸即可

1 /** 2 * 輸出所有域,包括父類中的域(通過遞歸實現) 3 */ 4 public void showAllField(Class clazz) { 5 Field[] fields = clazz.getDeclaredFields(); 6 System.out.println("------" + clazz.toString() + "------"); 7 if(fields != null && fields.length > 0) { 8 for(Field field : fields) { 9 System.out.println(field); 10 } 11 } 12 Class superClazz = clazz.getSuperclass(); 13 if(superClazz != Object.class) { // 結束遞歸 14 showAllField(superClazz); // 遞歸 15 } 16 } 17 18 @Test 19 public void showAllFieldTest() { 20 Class clazz = Kia.class; 21 showAllField(clazz); 22 }

運行結果如下:

------class o1.o1_a.Kia------ private java.lang.String o1.o1_a.Kia.model ------class o1.o1_a.Car------ private java.lang.String o1.o1_a.Car.name private java.lang.String o1.o1_a.Car.color

?那么好,結合上述2種操作,就能寫出具有實用價值的類復制方法了嗎?

當然不是,Java中操作Bean的專業戶是內省,Introspector

1 /** 2 * 通過專業操作JavaBean的內省,Introspector復制有繼承的類 3 * @throws Exception 4 */ 5 @Test 6 public void showProfile() throws Exception { 7 8 Kia k1 = new Kia(); // 源對象,繼承自Car 9 k1.setName("起亞"); // 這是Car中的域 10 k1.setColor("白色"); // 這是Car中的域 11 k1.setModel("K4"); 12 Kia k2 = new Kia(); // 目標對象 13 14 BeanInfo beanInfo = Introspector.getBeanInfo(Kia.class); // 得到Kia的Bean信息 15 PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); //通過BeanInfo得到域的描述符 16 for (PropertyDescriptor pd : pds) { 17 if (pd.getName() == "getClass()") { 18 continue; 19 } 20 if (pd.getReadMethod() == null || pd.getWriteMethod() == null) { // 如果set, get不配對就不復制 21 continue; 22 } 23 // 反射set目標對象中的域 24 pd.getWriteMethod().invoke(k2, pd.getReadMethod().invoke(k1)); 25 } 26 System.out.println(k2.getName() + k2.getModel() + k2.getColor()); 27 }

?

轉載于:https://www.cnblogs.com/simiie/p/6081977.html

總結

以上是生活随笔為你收集整理的Java反射 - 2(对象复制,父类域,内省)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 奇米777狠狠 | 黄色片高清 | 加勒比精品在线 | 中文字幕视频免费观看 | www.av777| 国产在线拍揄自揄拍无码 | 黄色成年人视频 | 欧美大喷水吹潮合集在线观看 | 国产美女三级无套内谢 | 亚洲中文字幕视频一区 | www.黄色网址.com | 日韩中文字幕网 | 大桥未久恸哭の女教师 | 成人免费网站在线观看 | 少妇又紧又色又爽又刺激 | 人妻一区二区三区免费 | 性――交――性――乱a | 欧美美女在线 | 久久精品综合网 | 黄色三级视频 | 福利二区视频 | 91麻豆精品国产91久久久久久久久 | 永久免费未满视频 | 欧美黑人一级爽快片淫片高清 | 国产成人精品一区二区三区福利 | 香蕉视频网站在线 | 国产成人av在线播放 | 欧洲高潮三级做爰 | 久久久久久黄色 | 男女午夜激情视频 | 热播之家 | 国产精品一二区在线观看 | 欧美成人免费一级 | 黄金网站在线观看 | 欧美午夜精品一区 | 欧美自拍偷拍一区 | 亚洲狼人天堂 | av东方在线 | 久草免费在线观看视频 | 少妇激情偷人爽爽91嫩草 | xxxxx在线 | 国产精品伦理 | 天天操夜夜骑 | 在线观看欧美一区 | 搡老熟女老女人一区二区 | 一个色的综合 | av伦理在线 | av在线资源播放 | 天天综合入口 | 国内少妇精品 | 日欧一级片 | 中国 免费 av| 乱lun合集小可的奶水 | 久操视频免费 | 神马午夜精品 | 亚洲精品一级片 | 天天天天操 | 成人午夜免费视频 | 国产九九九九 | 国产一久久 | av九九九 | 国模在线视频 | 一级黄色片免费观看 | 久久久999精品视频 国产在线xx | 日日综合网 | 欧美少妇激情 | 国产三级国产精品国产专区50 | 动漫精品一区一码二码三码四码 | 用力挺进新婚白嫩少妇 | 老司机精品视频网站 | 无码一区二区三区视频 | 小视频在线 | 日韩一区二区三区电影 | 91精品国产综合久久国产大片 | 少妇极品熟妇人妻无码 | www.国产在线视频 | 秋霞网av| 在线色亚洲 | 国产精品自拍av | 夜夜嗨老熟女av一区二区三区 | 欧美成人综合网站 | 国产精品2020 | 免播放器在线视频 | 久草网在线观看 | 生活片毛片 | 男人疯狂高潮呻吟视频 | 少妇一夜三次一区二区 | 爽好多水快深点欧美视频 | www国产免费| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 亚洲午夜一区二区 | 日本少妇激情舌吻 | 91原创视频在线观看 | 精品无码黑人又粗又大又长 | 免费黄色小说视频 | 日韩精品2 | 亚洲男女视频 | 青青草手机视频在线观看 | 99热首页 |