通过反射方式拷贝对象

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test06 {
    public static void main(String[] args) throws Exception {
        Person person = new Person();
        person.setName("张三");
        person.setGender("男");
        person.setId(1);

        Object o = copyObject(person);
        System.out.println(o);
    }

    public static Object copyObject(Object obj) throws Exception {

        // 获得传递过来的对象的方法的属性和构造器
        Class<?> class1 = obj.getClass();
        Field[] fields = class1.getDeclaredFields();
        Constructor<?> constructors = class1.getConstructor();
        // 创建一个对象
        Object instance = constructors.newInstance(new Object[]{});
        for (Field f : fields) {
            // 获得属性的name
            String name = f.getName();
            // 获得属性的类型
            Class<?> type = f.getType();
            // 获得属性对应的set的方法
            String setMethodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
            String getMethodName = "get" + name.substring(0, 1).toUpperCase() + name.substring(1);
            // 获得get方法
            Method gMethod = class1.getDeclaredMethod(getMethodName, null);
            // 调用get方法获得被拷贝的对象的一个属性值
            Object invoke = gMethod.invoke(obj, null);
            // 获得set方法
            Method sMethod = class1.getDeclaredMethod(setMethodName, new Class[]{gMethod.getReturnType()});
            sMethod.invoke(instance, new Object[]{invoke});

        }
        return instance;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值