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

遇到的问题描述:

多个页面查询后,返回的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;
}

Java反射-方法(Method)的更多相关文章

  1. Java 反射机制[Method反射]

    Java 反射机制[Method反射] 接着上一篇Java 反射机制[Field反射],通过调用Person类的setName方法将obj的name字段的Value设置为"callPerso ...

  2. 【译】5. Java反射——方法

    原文地址:http://tutorials.jenkov.com/java-reflection/methods.html ====================================== ...

  3. Java 反射 方法调用

    在使用Java 反射时,对方法的调用,可能碰到最多的问题是,方法的变量如何使用.其实,调用方法的变量全部在参数数组里,不管有多少个参数,你都要把它放在参数数组里,如果是单个非数组参数,则可不使用参数数 ...

  4. java反射机制 + Method.invoke解释 getMethod + 反射理解

    功能: 通过读取另一个Dll去创建一个控件(Form,Button,TextBox,DataGridView),然后对当中一些属性进行检查. 创建控件的大致流程是,Assembly->Modul ...

  5. java反射--方法反射的基本操作

    方法的反射 1)如何获取某个方法 方法的名称和方法的参数列表才能唯一决定某个方法. 2)方法反射的操作 method.invoke(对象,参数列表). 代码实例: package com.reflec ...

  6. java反射——方法

    大家都知道反射技术在Java里面时非常重要的一个技术点,因为Java好多框架的编写都是基于反射的,别的不多说,spring框架里面的IOC就是基于反射实现.那么什么是反射呢?JAVA反射机制是在运行状 ...

  7. Java反射方法总结

    1.得到构造器的方法 Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数, Constructor[] getConstr ...

  8. JAVA 反射之Method

    ★ Method没有构造器,只能通过Class获取. 重点方法: class.getDeclaredMethods():获取所有方法. class.getDeclaredMethod(String n ...

  9. 【译】7. Java反射——私有字段和私有方法

    原文地址:http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html =================== ...

随机推荐

  1. IBatis插入类的实例

    <insert id="insOrderDetail" parameterClass="OrderDetail"> INSERT INTO Orde ...

  2. 完整的ajax请求投票点赞功能的实现【数据库表一(票数)表二(ip限制重复投票)】

    前端php页面 <?php if(isset($_GET['id'])){ $id=$_GET['id']; } include('data/conn.php'); $sqls="se ...

  3. 3. 量化交易策略 - https://github.com/3123958139/blog-3123958139/README.md

    3. 量化交易策略 * 输入数据 - 只取最原始可靠的,如 * date * open * high * low * close * volume * 输出数据 - 根据数理统计取权重,把 o, h, ...

  4. MacPorts安装32位动态库

    http://superuser.com/questions/63198/install-32-bits-ports-on-snow-leopard

  5. C#如何把List of Object转换成List of T具体类型

    上周码程序的时候碰到个问题,因为设计上的约束,一个方法接受的参数只能为List<object>类型,然而该方法需要处理的真实数据则是确定的List<Currency>.然而C# ...

  6. linux 下 ls 文件夹和文件没有颜色的解决办法

    .bashrc 中加入 alias ls="ls --color"

  7. 再谈Jquery Ajax方法传递到action 【转载】

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://cnn237111.blog.51cto.com/2359144/984466 之 ...

  8. MVC 随记

    2014-09-04 [1] Json var contact = new Object(); contact.firstname = "Jesper"; contact.surn ...

  9. JSP指令

    一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: pa ...

  10. RabbitMQ安装后不能运行 Error: unable to connect to node nodedown

    本地安装RabbitMQ后总是不能正常的使用.. 命令行输入 rabbitMQctl Status  报下边的错 Error: unable to connect to node 'rabbit@YO ...