天天看點

Java反射-方法(Method)

工作了三年,第二次使用反射!

遇到的問題描述:

多個頁面查詢後,傳回的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]

聯系,我将以第一時間删除相關内容。