java 利用反射機(jī)制,獲取實(shí)體所有屬性和方法,并對(duì)屬性賦值
一個(gè)普通的實(shí)體Person:
private int id; private String name; private Date createdTime; ... //其它字段 // get set方法 ...............
現(xiàn)在需要把通過(guò)webService傳過(guò)來(lái)的實(shí)體Person里面的所有字段的null值,換成""
實(shí)現(xiàn)思路:
1.獲取實(shí)體的所有字段,遍歷
2.獲取字段類型
3.調(diào)用字段的get方法,判斷字段值是否為空
4.如果字段值為空,調(diào)用字段的set方法,為字段賦值
code:
Field[] field = model.getClass().getDeclaredFields(); // 獲取實(shí)體類的所有屬性,返回Field數(shù)組 try { for (int j = 0; j < field.length; j++) { // 遍歷所有屬性 String name = field[j].getName(); // 獲取屬性的名字 name = name.substring(0, 1).toUpperCase() + name.substring(1); // 將屬性的首字符大寫,方便構(gòu)造get,set方法 String type = field[j].getGenericType().toString(); // 獲取屬性的類型 if (type.equals("class java.lang.String")) { // 如果type是類類型,則前面包含"class ",后面跟類名 Method m = model.getClass().getMethod("get" + name); String value = (String) m.invoke(model); // 調(diào)用getter方法獲取屬性值 if (value == null) { m = model.getClass().getMethod("set"+name,String.class); m.invoke(model, ""); } } if (type.equals("class java.lang.Integer")) { Method m = model.getClass().getMethod("get" + name); Integer value = (Integer) m.invoke(model); if (value == null) { m = model.getClass().getMethod("set"+name,Integer.class); m.invoke(model, 0); } } if (type.equals("class java.lang.Boolean")) { Method m = model.getClass().getMethod("get" + name); Boolean value = (Boolean) m.invoke(model); if (value == null) { m = model.getClass().getMethod("set"+name,Boolean.class); m.invoke(model, false); } } if (type.equals("class java.util.Date")) { Method m = model.getClass().getMethod("get" + name); Date value = (Date) m.invoke(model); if (value == null) { m = model.getClass().getMethod("set"+name,Date.class); m.invoke(model, new Date()); } } // 如果有需要,可以仿照上面繼續(xù)進(jìn)行擴(kuò)充,再增加對(duì)其它類型的判斷 } } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
用java實(shí)現(xiàn)跳動(dòng)的小球示例代碼
這篇文章主要介紹了用java實(shí)現(xiàn)跳動(dòng)的小球,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05如何在Java中調(diào)用python文件執(zhí)行詳解
豐富的第三方庫(kù)使得python非常適合用于進(jìn)行數(shù)據(jù)分析,最近在項(xiàng)目中就涉及到j(luò)ava調(diào)用python實(shí)現(xiàn)的算法,下面這篇文章主要給大家介紹了關(guān)于如何在Java中調(diào)用python文件執(zhí)行的相關(guān)資料,需要的朋友可以參考下2022-05-05Elasticsearch中FST與前綴搜索應(yīng)用實(shí)戰(zhàn)解析
這篇文章主要為大家介紹了Elasticsearch中FST與前綴搜索應(yīng)用實(shí)戰(zhàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Java實(shí)現(xiàn)冒泡排序與雙向冒泡排序算法的代碼示例
這篇文章主要介紹了Java實(shí)現(xiàn)冒泡排序與雙向冒泡排序算法的代碼示例,值得一提的是所謂的雙向冒泡排序并不比普通的冒泡排序效率來(lái)得高,注意相應(yīng)的時(shí)間復(fù)雜度,需要的朋友可以參考下2016-04-04java留言管理系統(tǒng)中模糊查詢實(shí)例分享
這篇文章主要為大家詳細(xì)介紹了基于MVC+DAO的留言管理系統(tǒng)中java模糊查詢的簡(jiǎn)單使用方法,感興趣的小伙伴們可以參考一下2016-04-04java web用servlet監(jiān)聽器實(shí)現(xiàn)顯示在線人數(shù)
這篇文章主要為大家詳細(xì)介紹了java web用servlet監(jiān)聽器實(shí)現(xiàn)顯示在線人數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03