复制属性的BeanUtil(为null时跳过)

本文深入探讨了Java内省的原理与应用,通过Introspector类和BeanInfo接口解析JavaBean的属性及其get和set方法。介绍了PropertyDescriptor类的使用,并提供了一个实用的MyBeanUtils工具类,用于实现对象间属性的复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用java的内省


内省

概述:用来获得JavaBean的属性及属性的get或set方法

Introspector类
在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件。 
static BeanInfo getBeanInfo(Class<?> beanClass) 
BeanInfo类
获得 beans PropertyDescriptor。
PropertyDescriptor[] getPropertyDescriptors() 
PropertyDescriptor类
Method getReadMethod() 
获得应该用于读取属性值的方法。 (getXxx)
Method getWriteMethod() 
获得应该用于写入属性值的方法。 (setXxx)

工具类

public class MyBeanUtils {

    public static void copyProperties(Object source,Object target) throws Exception {
        if (source==null){
            throw new Exception("Source can bot be null");
        }
        if (target==null){
            throw new Exception("target can bot be null");
        }

        Class<?> sourceClazz = source.getClass();
        Class<?> targetClazz = target.getClass();

        if (!sourceClazz.equals(targetClazz)){
            throw new Exception("类型不一致");
        }

        BeanInfo beanInfo = Introspector.getBeanInfo(source.getClass());
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        for (PropertyDescriptor p:propertyDescriptors){
            Method readMethod = p.getReadMethod();
            Method writeMethod = p.getWriteMethod();
            Object value = readMethod.invoke(source, new Object[]{});
            if (value==null||readMethod.getName().equals("getClass")){
                continue;
            }
            writeMethod.invoke(target,value);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值