方法:
//不同实体类相同属性赋值,只复制有get,set方法的属性,默认不忽略空字符串,加参数true后忽略
public static void attrCopy(Object objFrom,Object objTo,String key,Boolean... args){
Class clsFrom=null;
Class clsTo=null;
try {
clsFrom = Class.forName(objFrom.getClass().getName());
clsTo = Class.forName(objTo.getClass().getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//获取两个实体类的所有属性
Field[] objFromFields = clsFrom.getDeclaredFields();
Field[] objToFields = clsTo.getDeclaredFields();
boolean ignoreEmpty=false;
//遍历赋值
for (Field formField : objFromFields) {
//如果是属性id不赋值
if(formField.getName().equals(key))
continue;
Object value = invokeGetMethod(objFrom ,formField.getName());
//如果是null不赋值
if (value!=null) {
for (Boolean bl : args) {
if (bl) {
ignoreEmpty=true;//忽略空字符串
break;
}
}
//如果是空字符串不赋值
if (ignoreEmpty) {
if (value instanceof String) {
String string=(String)value;
if (string.trim().length() == 0) {
continue;
}
}
}
for (Field toField : objToFields) {
//找相同的属性
if(formField.getName().equals(toField.getName())){
Object[] obj = new Object[1];
obj[0] = value;
invokeSetMethod(objTo, toField.getName(), obj);
break;
}
}
}
}
}
如何调用:
object1; //复制的对象
object2;//粘贴的对象
attrCopy(object1, object2, "主键Id");