@Data
@Builder
public class Person {
private String name;
public String sex;
private void say() {
System.out.println("private say()");
}
public void work(String workContext) {
System.out.println("public work()" + workContext);
}
}
// 测试
// 创建实体对象
Person person = Person.builder().name("张三").sex("男").build();
// 获取Class对象
Class<Person> personClass = Person.class;
// 获取Person类中的所有属性(不包含父类成员变量)
Field[] fields = personClass.getDeclaredFields();
for (Field field : fields) {
// 设置字段可访问
field.setAccessible(true);
// 获取字段名称
System.out.print(field.getName());
System.out.print("=");
// 获取字段值
System.out.println(field.get(person));
// 判断字段的修饰符是不是final
System.out.println(Modifier.isFinal(field.getModifiers()));
// 设置字段值
field.set(person, "通过反射设值");
}
System.out.println(person);
// 根据方法名获取私有方法对象
Method say = personClass.getDeclaredMethod("say");
// 将方法变成可见
say.setAccessible(true);
// 执行方法
say.invoke(person);
// 根据方法名获取有参方法
Method work = personClass.getDeclaredMethod("work", String.class);
// 执行方法
work.invoke(person, "嘎嘎嘎");
// 测试结果
name=张三
sex=男
Person(name=通过反射设值, sex=通过反射设值)
private say()
public work()嘎嘎嘎
Java反射
于 2023-01-28 17:47:32 首次发布