Java内省
作者:互联网
前言
在工作中,会遇到需要比较两个对象比较字段差异的情况(包括字段名称和字段的值),而Java的内省刚好适合这种场景。
对于一个标准的 javaBean
来说,它包括属性
、get 方法
和set 方法
,这是一个约定俗成的规范。为此 sun 提供了 Introspector 工具包,来使开发者更好或者更灵活的操作 javaBean。
获取字段名和方法名
public static void main(String[] args) throws Exception{
// 获取整个Bean的信息
// BeanInfo beanInfo= Introspector.getBeanInfo(User.class);
// 在Object类时候停止检索,可以选择在任意一个父类停止
BeanInfo beanInfo = Introspector.getBeanInfo(User.class, Object.class);
System.out.println("所有属性描述:");
// 获取所有的属性描述
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : pds) {
System.out.println(propertyDescriptor.getName());
}
System.out.println("所有方法描述:");
for (MethodDescriptor methodDescriptor : beanInfo.getMethodDescriptors()) {
System.out.println(methodDescriptor.getName());
// Method method = methodDescriptor.getMethod();
}
}
修改某个字段
User user = new User("jackMa", 21);
String propertyName = "name";
PropertyDescriptor namePd = new PropertyDescriptor(propertyName, User.class);
// 使用getReadMethod获取 get 方法执行
System.out.println("名字:" + namePd.getReadMethod().invoke(user));
// 调用getWriteMethod字段修改数据
namePd.getWriteMethod().invoke(user, "tom");
System.out.println("名字:" + namePd.getReadMethod().invoke(user));
总结:内省可以通过字段名
调用get
、set
方法,设置和获取字段
标签:Java,beanInfo,内省,System,User,println,namePd,out 来源: https://blog.csdn.net/qq_40674583/article/details/114891317