beancopier 深拷贝_对象的拷贝有几种方法

2022-10-03 17:07:25 浏览数 (2)

大家好,又见面了,我是你们的朋友全栈君。

BeanCopier 对象拷贝

  1. 对象拷贝转为其他类的对象
  2. 对象数组拷贝转为其他类的对象数组
代码语言:javascript复制
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.cglib.beans.BeanCopier;
/**
* BeanCopier工具类
*
* @author zwy
*/
public class BeanCopierUtil {
private static Map<String, BeanCopier> beanCopierMap = new ConcurrentHashMap<>();
/**
* 初始化 BeanCopier
*
* @param source
* @param target
* @return
*/
private static BeanCopier initCopier(Class source, Class target) {
BeanCopier beanCopier = BeanCopier.create(source, target, false);
beanCopierMap.put(source.getName()   "_"   target.getName(), beanCopier);
return beanCopier;
}
/**
* 获取BeanCopier
*
* @param source
* @param target
* @return
*/
private static BeanCopier getBeanCopier(Class source, Class target) {
BeanCopier beanCopier = beanCopierMap.get(source.getClass().getName()   "_"   target.getName());
if (beanCopier != null) {
return beanCopier;
}
return initCopier(source, target);
}
/**
* Pojo 类型转换(浅复制,字段名&类型相同则被复制)
*
* @param source 原对象
* @param targetClass 目标类
* @param <T>
* @return
*/
public static <T> T convert(Object source, Class<T> targetClass) {
if (source == null) {
return null;
}
BeanCopier beanCopier = getBeanCopier(source.getClass(), targetClass);
try {
T target = targetClass.getDeclaredConstructor().newInstance();
beanCopier.copy(source, target, null);
return target;
} catch (Exception e) {
throw new RuntimeException("对象拷贝失败"   source   "_"   targetClass);
}
}
/**
* Pojo 类型转换(浅复制,字段名&类型相同则被复制)
*
* @param source 原对象
* @param targetClass 目标类
* @param <E>
* @return
*/
public static <E> List<E> convert(List source, Class<E> targetClass) {
if (source == null) {
return null;
}
try {
if (source.isEmpty()) {
return source.getClass().getDeclaredConstructor().newInstance();
}
List result = source.getClass().getDeclaredConstructor().newInstance();
for (Object each : source) {
result.add(convert(each, targetClass));
}
return result;
} catch (Exception e) {
throw new RuntimeException("对象拷贝失败"   source   "_"   targetClass);
}
}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/197189.html原文链接:https://javaforall.cn

0 人点赞