public class BeanUtils {
private static final Map<String, BeanCopier> BEAN_COPIER_MAP = new HashMap<>();
/**
* 复制数组信息
*
* @param source 原数组
* @param targetClass 目标数组类型
* @param <S> 原数组类型
* @param <T> 目标数组类型
* @return 目标数组
*/
public static <S, T> List<T> cloneList(List<S> source, Class<T> targetClass) {
if (CollectionUtils.isEmpty(source)) {
return new ArrayList<>();
}
List<T> result = new ArrayList<>();
for (S item : source) {
result.add(copy(item, targetClass));
}
return result;
}
public static <S, T> T copy(S source, Class<T> tClass) {
if (source == null) {
return null;
}
try {
String key = source.getClass().getName() + "_" + tClass.getName();
if (!BEAN_COPIER_MAP.containsKey(key)) {
BEAN_COPIER_MAP.put(key, BeanCopier.create(source.getClass(), tClass, false));
}
T target = tClass.newInstance();
BEAN_COPIER_MAP.get(key).copy(source, target, null);
return target;
} catch (Exception e) {
}
return null;
}
public static <S, T> T packingBean(S source, T target) {
Class sourceBeanClass = source.getClass();
Class targetBeanClass = target.getClass();
Field[] sourceFields = sourceBeanClass.getDeclaredFields();
Field[] targetFields = targetBeanClass.getDeclaredFields();
for(int i=0; i<sourceFields.length; i++){
Field sourceField = sourceFields[i];
Field targetField = targetFields[i];
if(Modifier.isStatic(sourceField.getModifiers())){
continue;
}
if(Modifier.isStatic(targetField.getModifiers())){
continue;
}
sourceField.setAccessible(true);
targetField.setAccessible(true);
try {
if( !(sourceField.get(source) == null) && !"serialVersionUID".equals(sourceField.getName().toString())){
targetField.set(target,sourceField.get(source));
}
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
return target;
}
public static <S, T> T fastJsonCopy(S source, Class<T> tClass) {
if (source == null) {
return null;
}
try {
return JSONObject.parseObject(JSONObject.toJSONString(source), tClass);
} catch (Exception e) {
}
return null;
}