编程语言
首页 > 编程语言> > Java内省

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));

总结:内省可以通过字段名调用getset 方法,设置和获取字段

标签:Java,beanInfo,内省,System,User,println,namePd,out
来源: https://blog.csdn.net/qq_40674583/article/details/114891317