首页 > 代码库 > java利用反射完成不同类之间相同属性的复制
java利用反射完成不同类之间相同属性的复制
如果我们有两个不同的类对象,但他们具有相同的属性,我们怎么将一个对象的属性值复制给另外一个对象呢?
我们可以利用反射完成这个需求:首先我们利用反射得到两个对象的所有属性,再通过循环得到源对象(被复制的对象)每个属性值,然后再将值复制给目标对象(复制的对象)的属性。
源对象的类:
public class UserSource { private String name; private int age; private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }目标对象的类:
public class UserTarget { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }接下来,就是复制属性的操作代码:
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class CopyProperties { public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ UserSource source = new UserSource(); UserTarget target = new UserTarget(); source.setAge(23); source.setName("hao"); source.setAddress("gd"); copy(source, target); System.out.println("Name:" + target.getName()); System.out.println("Age:" + target.getAge()); } /** * 复制源对象和目标对象的属性值 * */ public static void copy(Object source, Object target) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ Class sourceClass = source.getClass();//得到对象的Class Class targetClass = target.getClass();//得到对象的Class Field[] sourceFields = sourceClass.getDeclaredFields();//得到Class对象的所有属性 Field[] targetFields = targetClass.getDeclaredFields();//得到Class对象的所有属性 for(Field sourceField : sourceFields){ String name = sourceField.getName();//属性名 Class type = sourceField.getType();//属性类型 String methodName = name.substring(0, 1).toUpperCase() + name.substring(1); Method getMethod = sourceClass.getMethod("get" + methodName);//得到属性对应get方法 Object value = http://www.mamicode.com/getMethod.invoke(source);//执行源对象的get方法得到属性值>执行结果:Name:hao Age:23这样,就完成了我们所需要的功能,成功复制了不同类对象的相同属性值。
java利用反射完成不同类之间相同属性的复制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。