通过反射克隆对象

package Reflection;

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


public class Test {
   public Object copyObj(Person person)throws Exception{
    Object obj = null;//克隆对象
    //获取源对象的Class
    Class c = person.getClass();
    //调用构造方法,创建对象
    obj = c.getConstructor(new Class[] {}).newInstance(new Object[] {});
    //获得对象中的所有属性
    Field[] fs = c.getDeclaredFields();//age  name
    for(int i=0;i<fs.length;i++){
     //组装get方法:1.get、2.属性中第一个字母大写、3.除第一个字母外其余字母相同
    
     Field f = fs[i];
     String fieldName=f.getName();
     //获取属性中第一个字母大写:age Age
     String firstLetter = fieldName.substring(0,1).toUpperCase();
     String getMethodName = "get"+firstLetter+fieldName.substring(1);
     //组装set方法:1.set、2.属性中第一个字母大写  3.除第一个字母外其余相同setAge
     String setMethodName = "set"+firstLetter+fieldName.substring(1);
    
     //获取指定的方法
     //get
     Method getMethod = c.getDeclaredMethod(getMethodName, new Class[] {});
     //set
     Method setMethod = c.getDeclaredMethod(setMethodName, new Class[] {f.getType()});
    
     //执行方法
     //get(源对象的get)
     Object value = getMethod.invoke(person,new Object[] {});
     //set
     setMethod.invoke(obj, value);
    
    
    
    }
    return obj;
   }
 
 public static void main(String[] args) throws Exception {
 //构建源对象
 Person c = new Person("jojgoigj","24");
 
 
 System.out.println("+++++++++源对象++++++++++");
    System.out.println(c.getAge()+"\t"+c.getName());
   
    Test t = new Test();
    Person per=(Person)t.copyObj(c);//克隆对象
    System.out.println("===========21=====");
    System.out.println(per.getAge()+"\t"+per.getName());
 }

}

package Reflection;

public class Person {
 String name;
 String age;
public Person() {
 super();
 // TODO Auto-generated constructor stub
}
public Person(String name, String age) {
 super();
 this.name = name;
 this.age = age;
}
public String getName() {
 return name;
}
public void setName(String name) {
 this.name = name;
}
public String getAge() {
 return age;
}
public void setAge(String age) {
 this.age = age;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值