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

}