importjava.lang.reflect.AccessibleObject;
importjava.lang.reflect.Field;
importorg.apache.log4j.Logger;

/***//**
*<p>Title:</p>
*
*<p>Description:</p>
*
*<p>Copyright:Copyright(c)2006</p>
*
*<p>Company:</p>
*
*<p>Author:一个人的日子</p>
*
*<p>Version:1.0</p>
*
*<p>CreateDate:2006-08-17</p>
*
*/


publicclassBeanUtil...{
privatestaticfinalLoggerlogger=Logger.getLogger(Logger.class);

/***//***//***//**
*Bean属性拷贝
*
*@paramdest
*@paramorig
*/
publicstaticvoidcopyProperties(Objectdest,Objectorig)...{
if(orig==null)...{
logger.error("error:copypropertyerror:origisnull");
}

if(dest==null)......{
logger.error("error:copypropertyerror:destisnull");
}
try......{
copy(dest,orig);
}catch(Exceptione)......{
logger.error("error:copypropertyerror:"+e.toString());
}
}

/***//***//***//**
*当orig的属性为null的就不拷贝到dest
*
*@paramdest
*@paramorig
*@throwsException
*/
privatestaticvoidcopy(Objectdest,Objectorig)throwsException...{
//得到两个Class的所有成员变量
Field[]destFields=dest.getClass().getDeclaredFields();
Field[]origFields=orig.getClass().getDeclaredFields();
//设置访问权限
AccessibleObject.setAccessible(destFields,true);
AccessibleObject.setAccessible(origFields,true);
Objectvalue=null;
Stringname=null;
StringreturnType=null;

for(inti=0;i<origFields.length;i++)...{
name=origFields[i].getName();
returnType=origFields[i].getType().getName();
for(intj=0;j<destFields.length;j++)...{
if(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;
}
}
}
}
}
本文介绍了一个用于Java Bean属性拷贝的实用工具类。该工具可在对象间复制属性值,支持不同对象间的属性同步,并能处理属性为null的情况。通过反射机制实现,确保源目标对象属性一致的同时避免了null值的拷贝。
1412

被折叠的 条评论
为什么被折叠?



