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 方法,设置和获取字段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值