我有一个类:
Student
-name
-surname
-address
-number
我有一个DTO就像:
StudentDTO
-name
-surname
-number
我会将我的学生班级发送到另一个班级,只有名字,姓氏和数字字段(我的意思不是所有字段)我决定将其命名为DTO(我没有使用序列化等等,只是我发送这个班级的object作为任何其他类的方法的参数)。
但是我们假设我有一行代码:
getAllStudents();
然后它返回:
List<Student>
但我想将它分配给一个变量:
List<StudentDTO>
如何轻松转换它们?
PS:我无法更改我的 getAllStudents(); 方法。我有学生列表,想要一种快速且精心设计的方法将对象列表转换为另一个对象列表。
答案 0 :(得分:2)
使用Apache commons-beanutils:
PropertyUtils.copyProperties(studentDtoBean, studentBean);
答案 1 :(得分:0)
public StudentDTO convert() {
StudentDTO newDTO = new StudentDTO(name, surname, number);
return newDTO;
}
您可以将其作为公共方法实现。
显然,这将被抽象为一个可以进行批处理的更大的转换方法。另一种方法是实现Cloneable并为Student创建一个特定的实现 - &gt; StudentDTO。迭代的例子:
List<StudentDTO> myList = new ArrayList<>();
for (Student s : collection) {
myList.add(s.convert());
}
return myList;
答案 2 :(得分:0)
您可以从StudentDTO扩展学生:
public class StudentDTO {
name;
surname;
number;
}
public class Student extends StudentDTO {
address;
}
比你能做的更多:
List<StudentDTO> dtoList = new ArrayList<StudentDTO>(getAllStudents());
答案 3 :(得分:0)
您可以尝试更改StudentDTO
以扩展Student
public StudentDTO extends Student {
}
请记住,您可以拥有address
属性,但无需使用它。如果可以,只需将方法的结果更改为:
public List<? extends Student> getAllStudents() {
List<StudentDTO> lsStudentDTO = new ArrayList<StudentDTO>();
//fill the list...
return lsStudentDTO;
}
编辑:
你没有改变里面的代码,你正在改变方法定义:)。此外,您始终可以扩展方法,可能是
public List<? extends Student> getAllStudentsDTO() {
//maybe you should add another logic here...
return getAllStudents();
}
如果您甚至无法改变此行为,请使用@DavidB回答。