工作了三年,第二次使用反射!
遇到的問題描述:
多個頁面查詢後,傳回的List中的對象屬性為“.00”,頁面顯示不友好。
查詢原因是因為查詢資料的SQL為:to_char(a.applyAmount,'999g999g999d99') as applyAmount,
而資料庫中applyAmount的值為0。
如果使用以下SQL語句進行測試的話,查詢結果也會查詢“ .00”的情況。
同時WEB端已采用标簽庫的形式解決了該問題,Mobile端使用該标簽時,不能進行解析該标簽。
SELECT TO_CHAR('0','999g999g999d99') FROM DUAL
這次的編碼思路:
利用反射機制,使用List中對應的所有的setter()和getter()方法,将對象的屬性重新指派!
代碼如下:
/**
* 利用Java反射機制
* 當List中的對象屬性-金額出現“.00”時,替換成“0”
* @author czx
* @date 2014-10-29
* @param list 要處理的List可能是<?>類型的List
* @return 處理後的List,即替換“.00”為“0”的List
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static List amonuntOfList2StringUtil(List list) {
List newList = new ArrayList();
// 非空判斷
if (list != null && list.size() > 0) {
// 周遊循環list
for (Object o : list) {
// 取得list中存放的對象所屬的類
Class c = o.getClass();
// 取得該類的所有方法數組
Method[] ma = c.getMethods();
if (ma.length > 0) {
// 周遊該方法數組
for (Method m : ma) {
// 僅處理set方法
if (m.getName().indexOf("set") >= 0) {
try {
// 取得get()方法
Method newm = c.getMethod(m.getName().replace("set", "get"),new Class[] {});
// 使用get()方法取得對應屬性
Object newo = newm.invoke(o, new Object[] {});
// 屬性滿足去空.trim()後和“.00”相等時,替換為“0”
if (newo != null && ".00".equals(newo.toString().trim())) {
// 使用set()方法,設定屬性
m.invoke(o, new Object[] { "0" });
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
}
newList.add(o);
}
return newList;
}
return list;
}
作者:
Candyメ奶糖出處:
http://www.cnblogs.com/Candies/本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
博文來源廣泛,如原作者認為我侵犯知識産權,請盡快給我發郵件
[email protected]聯系,我将以第一時間删除相關内容。