使用反射操作实体类的get,set方法
程序员文章站
2022-05-24 09:40:47
...
- 实体类,必须包含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();
//获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
//getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。
Field[] declaredFields = aClass.getDeclaredFields();
for(Field f:declaredFields){
//根据字段名称和 Class生成PropertyDescriptor,可得到读取和写入方法
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
上一篇: 自测可用的反射自定义set/get方法,
下一篇: 反射调用get和set方法
推荐阅读
-
详解php的魔术方法__get()和__set()使用介绍
-
Java —— 自动生成get、set方法(使用lombok的注解@Getter @Setter)
-
maven项目添加lombok并解决使用@data注解无set/get方法的问题
-
详解php的魔术方法__get()和__set()使用介绍
-
php中的__get()和__set()方法的使用
-
详解php的魔术方法__get()和__set()使用介绍_PHP教程
-
浅谈PHP拦截器之__set()与__get()的理解与使用方法_php实例
-
php中的__get()和__set()方法的使用
-
反射操作get、set方法
-
自测可用的反射自定义set/get方法,