小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
背景
其实不止是SpringBoot项目,其余的很多类型的项目,也都会存在对象复制的相关需求,所以,我们一般都会通过一个工具类来解决这类的需求。
解决方案和相应的工具类
首先我们要确定一件事情,那就是是否是相同属性的对象进行复制,如我们项目中的PO类,和VO类,就是会经常会存在互转的情况。
我们先来看一下相应的工具类吧,这也是我项目正在使用的工具类了。
public class CopyUtil {
/**
* 多个实体的复制
* @param source
* @param clazz
* @param <T>
* @return
*/
public static <T> List<T> copyList(List source, Class<T> clazz) {
List<T> target = new ArrayList<>();
if (!CollectionUtils.isEmpty(source)) {
for (Object c : source) {
T obj = copy(c, clazz);
target.add(obj);
}
}
return target;
}
/**
* 单个实体之间的复制
* @param source
* @param clazz
* @param <T>
* @return
*/
public static <T> T copy(Object source, Class<T> clazz) {
if (source == null) {
return null;
}
T obj = null;
try {
obj = clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
BeanUtils.copyProperties(source, obj);
return obj;
}
}
这里需要注意一点,复制转换属性,不是直接克隆对象,复制工具类是在两个不同的类型的对象之间进行属性值的复制。
而克隆对象又是另外一种情况,是同样类型对象下的直接克隆,下一篇我们再来说一下克隆的相关工具类。
通过上述复制工具类,我们就可以通过相应的代码调用就可以正常使用了,我也写个示例代码吧,如下:
DemoA demoA = CopyUtils.copy(demoB, DemoB.class);