- 实体类,必须包含get,set方法,否则无法反射
public class User {
private String name;
private String sex;
private int age;
public User(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
- 反射的测试
public void testRe() throws Exception {
Object o = new User("zhangsan","nan" ,12);
Class<?> aClass = o.getClass();
Field[] declaredFields = aClass.getDeclaredFields();
for(Field f:declaredFields){
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), aClass);
Method readMethod = pd.getReadMethod();
Method writeMethod = pd.getWriteMethod();
Object invoke = readMethod.invoke(o);
System.out.println(readMethod.getName()+":"+invoke);
if(invoke instanceof Integer){
writeMethod.invoke(o,15);
}else{
writeMethod.invoke(o,"goudan");
}
invoke = readMethod.invoke(o);
System.out.println("执行读取方法后"+writeMethod.getName()+":"+invoke);
}
}
- 执行结果
getName:zhangsan
执行读取方法后setName:goudan
getSex:nan
执行读取方法后setSex:goudan
getAge:12
执行读取方法后setAge:15