zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    bzoj 4245: [ONTAK2015]OR-XOR【按位贪心】
    bzoj 4247: 挂饰【dp】
    bzoj 3503: [Cqoi2014]和谐矩阵【高斯消元】
    bzoj 3029: 守卫者的挑战【概率dp】
    bzoj 3732: Network【克鲁斯卡尔+树链剖分】
    bzoj 1040: [ZJOI2008]骑士【基环树+树形dp】
    bzoj 3668: [Noi2014]起床困难综合症【贪心】
    bzoj 2157: 旅游【树链剖分+线段树】
    bzoj 4521: [Cqoi2016]手机号码【数位dp】
    bzoj 3437: 小P的牧场【斜率优化】
  • 原文地址:https://www.cnblogs.com/Candies/p/4059069.html
Copyright © 2011-2022 走看看