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 extends Student> getAllStudents() { List lsStudentDTO = new ArrayList (); //fill the list... return lsStudentDTO; }
编辑:
你没有改变里面的代码,你正在改变方法定义:)。 此外,您可以随时扩展方法,也许可以扩展
public List extends Student> 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());