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;
    }

转载于:https://www.cnblogs.com/Candies/p/4059069.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值