#1024程序员节 | 征文#
文章目录
- 一、深拷贝
- 二、不为空拷贝
- 三、List转换
1024 祝各位大佬 节日快乐!
在Java项目开发中,对Java对象操作如bean复制等,可使用
一、深拷贝
private static final Map<String, BeanCopier> BEAN_COPIER_MAP = new ConcurrentHashMap<>();
private static ConverterSetting convert = new ConverterSetting();
/**
* 深拷贝,我们可以直接传实例化的拷贝对象和被实例化的拷贝对象进行深拷贝
*
* @param source
* 源对象
* @param target
* 目标类
*/
public static void copyBean(Object source, Object target) {
String key = getKey(source, target);
BeanCopier beanCopier;
if (!BEAN_COPIER_MAP.containsKey(key)) {
beanCopier = BeanCopier.create(source.getClass(), target.getClass(), true);
BEAN_COPIER_MAP.put(key, beanCopier);
} else {
beanCopier = BEAN_COPIER_MAP.get(key);
}
beanCopier.copy(source, target, convert);
}
private static String getKey(Object source, Object target) {
return source.getClass().getName() + "_" + target.getClass().getName();
}
二、不为空拷贝
// 只拷贝不为null对象
public void copyNotNull(Object source, Object target) {
String key = getKey(source, target);
BeanCopier beanCopier;
if (!BEAN_COPIER_MAP.containsKey(key)) {
beanCopier = BeanCopier.create(source.getClass(), target.getClass(), true);
BEAN_COPIER_MAP.put(key, beanCopier);
} else {
beanCopier = BEAN_COPIER_MAP.get(key);
}
beanCopier.copy(source, target, convertNotNull);
}
三、List转换
/**
* list bean转换
*
* @param param
* @param clazz
* @return
*/
public <T> List<T> listBeanConvert(List<?> param, Class<T> clazz) {
if (CollectionUtils.isEmpty(param)) {
return new ArrayList<>();
}
List<T> list = new ArrayList<>();
try {
for (Object obj : param) {
T t = clazz.newInstance();
copyProperties(obj, t);
list.add(t);
}
} catch (Exception e) {
return new ArrayList<>();
}
return list;
}