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

}