java invoke 反射的使用方法

public class TaskProvidePropsList {

private int provide_id;
         private int props_sign;
         public int getProvide_id() {
  return provide_id;
}
public void setProvide_id(int provide_id) {
  this.provide_id = provide_id;
}
       public int getProps_sign() {
  return props_sign;
}
public void setProps_sign(int props_sign) {
  this.props_sign = props_sign;
}
}
寫一個invoke的實例,就是調用所有的set方法,進行賦值,然後通過所有的get方法取值,打印出值來

你這個類是一個嚴格的JavaBean格式。。所以先可以獲得屬性。。然後獲得讀寫方法。。然後寫值。。讀值。。hibernate其實也就是採用的這種差不多的方式。。

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectTest {

/**
  * @param args
  */
public static void main(String[] args) throws Exception {
  Class clazz = Class.forName("TaskProvidePropsList");//這裏的類名是全名。。有包的話要加上包名
  Object obj = clazz.newInstance();
  Field[] fields = clazz.getDeclaredFields();
  //寫數據
  for(Field f : fields) {
   PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
   Method wM = pd.getWriteMethod();//獲得寫方法
   wM.invoke(obj, 2);//因爲知道是int類型的屬性,所以傳個int過去就是了。。實際情況中需要判斷下他的參數類型
  }
  //讀數據
  for(Field f : fields) {
   PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
   Method rM = pd.getReadMethod();//獲得讀方法
   Integer num = (Integer) rM.invoke(obj);//因爲知道是int類型的屬性,所以轉換成integer就是了。。也可以不轉換直接打印
   System.out.println(num);
  }
}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章