反射 复制一个实体对象并修改指定属性。
2014-05-19 16:59
274 查看
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 对象属性复制辅助类 * * @author wangpeng 2014-1-3 */ public class PropertiesCopier { /** * 属性复制,常用于实体的属性值修改<br> * 将target(目标)中需要修改的属性的值替换为carreier(被修改属性携带者)的值<br> * 需要被修改的属性为方法第4参数指定<br> * 例:<br> * * <pre> * User carrier = new User(); * carrier.setName("newvalue"); * User target = new User(); * target.setId(1); * target.setName("oldvalue"); * PropertiesCopier.copy(User.class, carrier, target, new String[] { "name" }); * System.out.println(target.getName()); * </pre> * * 运行结果为target属性name值oldvalue被替换为newvalue<br> * * @param entityClass * 对象属性复制所属类 * @param carrier * 被修改属性携带者 * @param target * 目标 * @param properties * 需要被修改的属性 */ public static void copy(Class<?> entityClass, Object carrier, Object target, String[] properties) { // 对象属性复制所属类所有方法 Method[] entityMethods = entityClass.getMethods(); // 进行属性复制需要被调用的方法 Method[] invokeMethods = new Method[properties.length * 2]; // 从entityMethods(所有方法)中获取invokeMethods(需要被调用方法) for (int i = 0; i < properties.length; i++) { for (Method method : entityMethods) { if (method.getName().equalsIgnoreCase("set" + properties[i])) invokeMethods[i * 2] = method; if (method.getName().equalsIgnoreCase("get" + properties[i])) invokeMethods[i * 2 + 1] = method; } } // 复制进行 for (int i = 0; i < invokeMethods.length; i += 2) { try { // target.setMethod(carrier.getMethod()); invokeMethods[i].invoke(target, invokeMethods[i + 1].invoke(carrier)); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } }
可以应用于web开发的数据持久化的修改操作
target从数据库取出来,carrier从前台传过来
target原属性值被carrier新属性值替换
然后执行更新
代码主要用到了反射机制 调用方式在方法注释中
相关文章推荐
- 反射_通过反射写一个通用的设置某个对象的某个属性为指定的值
- 反射(通过反射写一个通用的设置某个对象的某个属性为指定的值)
- 反射-通过反射写一个通用的设置某个对象的某个属性为指定的值
- js中如何复制一个对象并获取其所有属性和属性对应的值
- list列表中添加多个【只修改了一个属性的对象】
- 使用反射复制一个JavaBean的对象
- C#反射遍历一个对象属性(小技巧)
- 逐步为对象集合构建一个通用的按指定属性排序的方法
- 通过反射机制,对将要入库的实体对象的各个属性进行判断,得到最终要更新的实体对象
- [置顶] js中如何复制一个对象,如何获取所有属性和属性对应的值
- javascript下判断一个对象是否具有指定名称的属性的的代码
- 使用反射复制一个JavaBean的对象
- C#利用反射获取对象属性的修改情况
- 将一个对象的属性复制到另外一个对象里去
- C#反射遍历一个对象属性(小技巧)
- js中如何复制一个对象并获取其所有属性和属性对应的值
- 写一个方法进行各种属性的更新,而不要每个界面设置改变都改变一个属性。就是点击应用或确定按钮时调用这个更新属性的方法,遍历所有(控制对象属性的)界面控件的状态(值),进行属性修改和刷新。
- 使用反射修改对象属性注意事项
- 使用反射复制一个JavaBean的对象
- 输出一个对象的所有属性的值,可以不用反射机制,用JSON处理更方便