假如有一个Person类,一个Student类,如下:
public class Person
{
public int id{get;set;}
public string name{get;set;}
public byte sex{get;set;}
public int age{get;set;}
}
public class Student
{
public string name{get;set;}
public byte sex{get;set;}
public string sexCN{get;set;}
}
然后有一个List<Person>
对象personList
,我们要从这个personList
数据对象中得到一个新的studentList
对象,在C#里的方法如下:
List<Student> studentList=new List<Student>();
foreach (var person in personList)
{
Student student=new Student();
student.name=person.name;
student.sex=person.sex;
student.sexCN=SexEnum.Default.GetDes(person.sex.ToString());
studentList.Add(student);
}
在Java里面的实现方式如下:
List<Student> studentList=new ArrayList<>();
for(Person person in personList){
Student student=new Student();
BeanMapper.copy(person,student);//第一个参数是源数据,第二个参数是目标数据
student.setSexCN(SexEnum.GetDes(person.sex.ToString()));
}
注: 目标数据实体里的属性名必须和源数据实体里的属性名保持一致。
到这里为止,我已经知道了BeanMapper的使用方法,但是还只知其然,不知其所以然。
后来一翻代码,发现BeanMapper是被同事封装过了的,它其实是基于DozerBeanMapper的map方法。就算看到这里,我可能还是没能深刻的知其所以然,不然应该也可以在C#里面实现一个类似的拷贝方法了吧。