2

私は次のようなクラスを持っています:

Student
-name
-surname
-address
-number

そして、次のようなDTOがあります:

StudentDTO
-name
-surname
-number

名前、姓、番号のフィールドだけで学生クラスを別のクラスに送信し(すべてのフィールドではないことを意味します)、DTOとして名前を付けることにしました(シリアル化などを使用していません。このクラスのオブジェクトをパラメーターとして送信するだけです他のクラスのメソッドに)。

ただし、次のようなコード行があると仮定しましょう。

getAllStudents();

そしてそれは戻ります:

List<Student>

しかし、次のような変数に割り当てたい:

List<StudentDTO>

どうすれば簡単に変換できますか?

PS: getAllStudents();を変更できません。メソッドの内部。私は学生のリストを持っており、オブジェクトのリストを別のオブジェクトのリストに変換するための迅速で適切に設計された方法が必要です。

4

4 に答える 4

2

Apache commons-beanutils を使用します。

PropertyUtils.copyProperties(studentDtoBean, studentBean);
于 2012-05-28T14:36:27.077 に答える
0

StudentDTO から Student を拡張できます。

public class StudentDTO {
    name;
    surname;
    number;
}

public class Student extends StudentDTO {
    address;
}

あなたができるよりも:

List<StudentDTO> dtoList = new ArrayList<StudentDTO>(getAllStudents());
于 2012-05-28T14:11:54.070 に答える
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 の回答を使用してください。

于 2012-05-28T14:12:24.817 に答える
0
public StudentDTO convert() {
    StudentDTO newDTO = new StudentDTO(name, surname, number);
    return newDTO;
}

そして、これを public メソッドとして実装できます。

これは明らかに、バッチ処理を実行できるより大きな convert メソッドに抽象化されます。もう 1 つの方法は、Cloneable を実装し、Student -> StudentDTO 専用の実装を作成することです。

反復例:

List<StudentDTO> myList = new ArrayList<>();
    for (Student s : collection) {
        myList.add(s.convert());
    }
    return myList;
于 2012-05-28T14:05:00.380 に答える