/** * 两个相同属性的对象赋值 * * @param sourceObj * @param targetObj */ public static void entityPropertiesCopy(Object sourceObj, Object targetObj) { if (sourceObj == null || targetObj == null) return; Class targetClass = null; //用java反射机制就可以, 可以做成通用的方法, 只要属性名和类型一样 Field[] sourceFields = null; try { targetClass = targetObj.getClass(); sourceFields = sourceObj.getClass().getDeclaredFields(); } catch (Exception e) { e.printStackTrace(); } String fieldName = ""; Class fieldType = null; for (int i = 0; i < sourceFields.length; i++) { try { fieldName = sourceFields[i].getName(); fieldType = sourceFields[i].getType(); Field targetField = targetClass.getDeclaredField(fieldName); if (targetField != null && targetField.getType().equals(fieldType)) { Method sourceGetter = sourceObj.getClass().getMethod(getGetMethodName(fieldName)); Method targetSetter = targetObj.getClass().getMethod(getSetMethodName(fieldName), new Class<?>[]{fieldType}); Object fieldValue = sourceGetter.invoke(sourceObj); if (fieldValue != null) { targetSetter.invoke(targetObj, new Object[]{fieldValue}); } } } catch (NoSuchFieldException e) { } catch (Exception e) { e.printStackTrace(); } } } public static String getGetMethodName(String fieldName) { String result = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); return "get" + result; } public static String getSetMethodName(String fieldName) { String result = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); return "set" + result; }
利用发射进行对象赋值
转载上一篇:关于显示的Util
下一篇:Bitmap Util
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
C# 利用反射进行深拷贝clementine
-
golang 通过反射进行json解析
t = t.Elem() } inst
golang json 解耦 -
React向对象数组进行赋值
赋值
react 赋值 其他 -
java 对于映射进行排序 java对对象排序
Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题,Java实现对象排序的两种方式:?自然排序 java.lang.Comparable?定制排序 java.util.Comparator
java 对于映射进行排序 java对象的排序函数 java 泛型 ide