两个bean对象属性值copy源码

来源:互联网 发布:一步转移概率矩阵例题 编辑:程序博客网 时间:2024/06/06 00:17
/**  * Bean 属性拷贝  *   * @param dest   目标对象  * @param orig  源对象  */
public static void copyProperties(Object dest, Object orig) {
if (orig == null) {
logger.error("\n error: copy property error: orig is null");
return ;
}
if (dest == null) {
logger.error("\n error: copy property error: dest is null");
return ;
}
try {
copy(dest, orig);
} catch (Exception e) {
logger.error("\n error: copy property error: " + e.toString());
}

}


/**  * 当orig的属性为 null 的就不拷贝到 dest  *   * @param dest   目标对象 * @param orig  源对象* @throws Exception  */
private static void copy(Object dest, Object orig) throws Exception {
// 得到两个Class 的所有成员变量  
Field[] destFields = dest.getClass().getDeclaredFields();
Field[] origFields = orig.getClass().getDeclaredFields();
// 设置访问权限 
AccessibleObject.setAccessible(destFields, true);
AccessibleObject.setAccessible(origFields, true);
Object value = null;
String name = null;
String returnType = null;
for (int i = 0; i < origFields.length; i++) {
name = origFields[i].getName();
returnType = origFields[i].getType().getName();
for (int j = 0; j < destFields.length; j++) {
if (!isFinal(destFields[j].getModifiers())//add feibu
&& name.equals(destFields[j].getName())
&& returnType.equals(destFields[j].getType().getName())) {
value = origFields[i].get(orig);
if (value != null) {
destFields[j].set(dest, value);
}
break;
}
}
}
}




0 0