Java转换类

时间:2012-05-28 14:03:08

标签: java dto

我有一个类:

Student
-name
-surname
-address
-number

我有一个DTO就像:

StudentDTO
-name
-surname
-number

我会将我的学生班级发送到另一个班级,只有名字,姓氏和数字字段(我的意思不是所有字段)我决定将其命名为DTO(我没有使用序列化等等,只是我发送这个班级的object作为任何其他类的方法的参数)。

但是我们假设我有一行代码:

getAllStudents();

然后它返回:

List<Student>

但我想将它分配给一个变量:

List<StudentDTO>

如何轻松转换它们?

PS:我无法更改我的 getAllStudents(); 方法。我有学生列表,想要一种快速且精心设计的方法将对象列表转换为另一个对象列表。

4 个答案:

答案 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回答。