java的反射是很有趣的东西。最近研究了一个这个包。
发现可以利用反射简化许多重复的代码。
例如我有一个简单的bean,结构如下:
class TestBean {
private String userid;
private String password;
private String year;
public getXXX();
public setXXX();
.........
}
通常调用者要具体为这个类填充值的时候往往会不厌其烦,怎么有那么多getXXX()和setXXX()要写,其实如果使用反射,这个问题很好解决。
以通常使用的反射类Method这个类为例子:
首先我定义一个数组,来存放数据库的表的字段名和类型:
private final static String[][] fieldNames= {
{"mq_userid","int"},
{"mq_username","string"},
{"mq_inbox_name","string"},
{"mq_outbox_name","string"},
{"mq_response_name","string"}
};
然后在方法里调用:
ResultSet rs ;
if (rs.next()) {
Method intMethod = ResultSet.class.getMethod("getInt",new Class[]{String.class});
Method strMethod = ResultSet.class.getMethod("getString",new Class[]{String.class});
//循环用反射方法来取对应字段的值
for (int i=0;i<fieldNames.length;i++) {
if (fieldNames[i][1].equals("int")) {
strValue = (intMethod.invoke(rs,new Object[]{fieldNames[i][0]})).toString();
}
if (fieldNames[i][1].equals("string")) {
strValue = (String)strMethod.invoke(rs,new Object[]{fieldNames[i][0]});
}
}
}