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