在实际生产中常常会遇见这样一种情况,就是由于数据库设计或者页面设计导致的
批量操作大量规律命名的对象。
例如下面这样一种情况
- create table tt
- (
- Q1_CODE VARCHAR2(3),
- Q2_CODE VARCHAR2(3),
- .....
- Q100_CODE VARCHAR2(3),
- );
恕本人抱怨一句,设计出这样的表的人八成是吃得有点饱。
呵呵于是利用工具生成了JavaBean一般就是Struts的form,有的叫做DTO,有的叫做Ao,bo,bao,dao..........众多名字。访问数据库的时候就用它们做容器。
面对100个get方法,一一调用,太无聊了。有什么简便方法呢.如果有像JS的eval()的方法就会方便多了。可惜啊。
不过!!java中有一种神奇的机制,娃哈哈Java Reflection
以下是我参考的两个网址
http://www-128.ibm.com/developerworks/cn/java/j-dyn0603/
http://dev.csdn.net/article/49/49876.shtm
大家想要仔细了解就去看看吧。
现在介绍一下我的具体实现:
- public static void main(String args[]) {
- try {
- Class c = Class.forName("com.TtDto");
- //这里面的类名要写全,连包名一起写
- Method m[] = c.getDeclaredMethods();
- //method的方法有很多下面会讲一讲
- TtDto methobj = new TtDto();
- for (int i = 0; i < m.length; i++) {
- System.out.println("name = " + m[i].getName());
- //打印出来的名字同羊可以用来做处理,String向怎么处理就怎么处理。
- // Object retobj = m[i].invoke(methobj, null);
- //这部才是非常重要的调用,但是你可以通过上一步的处理来决定是否进行调用来完成奇怪的调用。
- }
- } catch (Throwable e) {
- System.err.println(e);
- }
- }
这样你就看到这个类下面的所有方法了。把注释掉的代码用上就可以调用你看到的方法,了哈哈,怎么样,很好玩吧。
下面讲两个方法:
throws IllegalAccessException,
IllegalArgumentException
如果基础方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。
参数:
obj - 从中调用基础方法的对象
args - 用于方法调用的参数
返回:
使用参数 args 在 obj 上指派该对象所表示方法的结果
可以查阅JDK文档。
getDeclaredMethods和getMethods差不多都是返回一个方法的数组。当然了你也可以按照方法的名字来调用方法
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。