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);
}
}
}
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);
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.