public class BeanUtils {
private static final Logger logger = Logger.getLogger(BeanUtils.class);
public static void copyNotNull(Object src, Object dest) {
baseCopy(src, dest, false);
}
public static void copy(Object src, Object dest) {
baseCopy(src, dest, true);
}
public static void baseCopy(Object src, Object dest, boolean isCopyNull) {
Map objMap = getObjectAllField(src, true);
Map destMap = getObjectAllField(dest, true);
Set objFieldNameSet = objMap.keySet();
Field objField = null;
Field descField = null;
for (String fieldName : objFieldNameSet) {
objField = objMap.get(fieldName);
descField = destMap.get(fieldName);
if (descField != null) {
if (objField.getType().equals(descField.getType())) {
objField.setAccessible(true);
descField.setAccessible(true);
try {
if ((isCopyNull || objField.get(src) != null) && !Modifier.isFinal(objField.getModifiers())) {
descField.set(dest, objField.get(src));
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
}
}
}
/**
* 获取该对象自己以及继承的上层对象的所有属性
*
* @param obj
* @param isParentField
* 是否包含父类的属性
* @return
*/
public static Map getObjectAllField(Object obj, boolean isParentField) {
Map fieldMap = new HashMap();
Class> objCls = obj.getClass();
while (objCls != null) {
Field[] fields = objCls.getDeclaredFields();
for (Field field : fields) {
if (!fieldMap.containsKey(field.getName())) {
fieldMap.put(field.getName(), field);
}
}
if (!isParentField)
break;
objCls = objCls.getSuperclass();
}
return fieldMap;
}
/**
* 获取该对象自己以及继承的上层对象的所有属性
*
* @param class
* @param isParentField
* 是否包含父类的属性
* @return
*/
public static Map getObjectAllField(Class> objCls, boolean isParentField) {
Map fieldMap = new HashMap();
while (objCls != null) {
Field[] fields = objCls.getDeclaredFields();
for (Field field : fields) {
if (!fieldMap.containsKey(field.getName())) {
fieldMap.put(field.getName(), field);
}
}
if (!isParentField)
break;
objCls = objCls.getSuperclass();
}
return fieldMap;
}
/**
* 获取对象属性值
*
* @param obj
* @param fieldName
* @return
*/
public static Object getObjectFieldValue(Object obj, String fieldName) {
Class> cls = obj.getClass();
try {
Field field = cls.getField(fieldName);
field.setAccessible(true);
return field.get(obj);
} catch (NoSuchFieldException e) {
logger.error(e.getMessage(), e);
} catch (SecurityException e) {
logger.error(e.getMessage(), e);
} catch (IllegalArgumentException e) {
logger.error(e.getMessage(), e);
} catch (IllegalAccessException e) {
logger.error(e.getMessage(), e);
}
return null;
}
public static Object getObjectByMethodName(Object obj, String methodName) {
Class> cls = obj.getClass();
try {
Method method = cls.getDeclaredMethod(methodName, null);
return method.invoke(obj, null);
} catch (NoSuchMethodException e) {
logger.error(e.getMessage(), e);
} catch (SecurityException e) {
logger.error(e.getMessage(), e);
} catch (IllegalAccessException e) {
logger.error(e.getMessage(), e);
} catch (IllegalArgumentException e) {
logger.error(e.getMessage(), e);
} catch (InvocationTargetException e) {
logger.error(e.getMessage(), e);
}
return null;
}
/**
* 判断对象是否为基本数据类型
*
* @param obj
* @return
*/
public static boolean isBaseType(Object obj) {
try {
Field field = obj.getClass().getField("TYPE");
if(field == null){
return false;
}
return ((Class>) field.get(null)).isPrimitive();
} catch (Exception e) {
return false;
}
}
/**
* 判断对象是否为基本数据类型
*
* @param clazz
* @return
*/
public static boolean isBaseType(Class> clazz) {
try {
Field field = clazz.getField("TYPE");
if(field == null){
return false;
}
return ((Class>) field.get(null)).isPrimitive();
} catch (Exception e) {
return false;
}
}
/**
* 获取对象集合中某个属性的集合
*
* @param list
* @param fieldName
* @param cls
* @return
*/
public static List getFieldValueList(List> list, String fieldName, Class cls) {
List fieldValueList = new ArrayList();
if (list.size() == 0) {
return fieldValueList;
}
Class> clazz = list.get(0).getClass();
try {
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
for (Object obj : list) {
fieldValueList.add(cls.cast(field.get(obj)));
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return fieldValueList;
}
}