Java转换类

我有一个类:

Student -name -surname -address -number 

我有一个DTO就像:

 StudentDTO -name -surname -number 

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

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

 getAllStudents(); 

它返回:

 List 

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

 List 

我怎样才能轻松转换它们?

PS:我不能改变我的getAllStudents(); 方法在里面。 我有学生列表,想要一种快速而精心设计的方法将对象列表转换为另一个对象列表。

 public StudentDTO convert() { StudentDTO newDTO = new StudentDTO(name, surname, number); return newDTO; } 

您可以将其作为公共方法实现。

显然,这将被抽象为可以进行批处理的更大的转换方法。 另一种方法是实现Cloneable并为Student – > StudentDTO创建一个特定的实现。

迭代的例子:

 List myList = new ArrayList<>(); for (Student s : collection) { myList.add(s.convert()); } return myList; 

使用Apache commons-beanutils:

 PropertyUtils.copyProperties(studentDtoBean, studentBean); 

您可以尝试更改StudentDTO以扩展Student

 public StudentDTO extends Student { } 

请记住,您可以拥有address属性,但无需使用它。 如果你能做到,那么只需将方法的结果更改为:

 public List getAllStudents() { List lsStudentDTO = new ArrayList(); //fill the list... return lsStudentDTO; } 

编辑:

你没有改变里面的代码,你正在改变方法定义:)。 此外,您可以随时扩展方法,也许可以扩展

 public List getAllStudentsDTO() { //maybe you should add another logic here... return getAllStudents(); } 

如果您甚至无法改变此行为,请使用@DavidB答案。

您可以从StudentDTO扩展学生:

 public class StudentDTO { name; surname; number; } public class Student extends StudentDTO { address; } 

比你能做的:

 List dtoList = new ArrayList(getAllStudents());