Java通过反射实现简单对象的拷贝
来源:互联网 发布:js tochararray 编辑:程序博客网 时间:2024/05/16 16:09
代码实现
package me.andy.practice.annotation;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;public class ReflectUtils { public static Object copy(Object resource) throws Exception { Class<? extends Object> classType = resource.getClass(); Object newObject = classType.newInstance(); Field[] declaredFields = classType.getDeclaredFields(); for (Field filed : declaredFields) { String firstLetter = filed.getName().substring(0, 1).toUpperCase(); String getMethodName = "get" + firstLetter + filed.getName().substring(1); String setMethodName = "set" + firstLetter + filed.getName().substring(1); Method getMethod = classType.getMethod(getMethodName, new Class[]{}); Method setMethod = classType.getMethod(setMethodName, new Class[]{filed.getType()}); Object value = getMethod.invoke(resource, new Object[]{}); setMethod.invoke(newObject, new Object[]{value}); } return newObject; }}
代码解释
Object newObject = classType.newInstance();
等价于
Constructor<? extends Object> constructor = classType.getConstructor(new Class[]{});
Object newObject = constructor.newInstance(new Object[]{});
Field[] declaredFields = classType.getDeclaredFields()返回当前类声明的所有方法(包括私有共有)
classType.getFields()返回当前类共有方法,包括继承父类的
测试代码
package me.andy.practice.reflect;import me.andy.practice.annotation.ReflectUtils;import org.junit.Test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import static junit.framework.Assert.assertEquals;public class ReflectTest { @Test public void test_copy() throws Exception { Person person = new Person("andy", 1); Person copyPerson = (Person) ReflectUtils.copy(person); assertEquals("andy", copyPerson.getName()); assertEquals(Integer.valueOf(1), copyPerson.getAge()); }}package me.andy.practice.reflect;public class Person { private String name; private Integer age; public Person() { } public Person(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; }}
- Java通过反射实现简单对象的拷贝
- 通过Java的反射机制实现对象的拷贝
- java反射(5)通过反射拷贝对象
- Java反射机制实现对象属性值的拷贝
- 通过JAVA反射实现简单的ORM,将查询结果封装为对象
- 反射实现对象拷贝
- java反射(对象拷贝)
- 通过反射完成不同对象之间的属性拷贝
- Java深拷贝除了通过实现Cloneable接口,另外还可以通过序列化实现对象的拷贝。
- Java反射实现的Bean拷贝类
- 对象之间通过反射拷贝数据
- 实现对象深拷贝的简单案例
- JavaScript对象的浅拷贝和深拷贝简单实现
- java-反射(1)-通过反射改变对象的属性
- java对象拷贝(java反射)
- java通过反射实现数据库的编写
- 通过JAVA的Serialization机制进行对象的拷贝
- 自定义test之java对象属性拷贝简单实现
- Android.mk文件分析
- SAX生成xml文件
- DataTable中列求和的方法
- 读取一个文件中的内容到String中
- mfc对话框窗口之间变量的传递
- Java通过反射实现简单对象的拷贝
- __declspec(dllexport)与__declspec(dllimport)
- 过滤字符串中的多字节字符
- 我答知乎:网页的侧边栏应该放在左边还是右边?
- Android 4.0.3 显示系统深入理解
- Python学习笔记——常量定义
- ffmpeg教程七——使用举例——水印制作
- 记住:一个很简单又很复杂的规则:一个类型引用只能引用类型本身含有的方法和变量
- 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件