0

たとえば、次のように、ほぼ同じデータを持つ2つのオブジェクトを適応させる必要がある状況に陥ったのはこれが初めてではありません。

User.java  (Object returned from another library)
private String name;
private String surname;
private String email;
private String telephone;
...
getters and setters();
constructor();

MyUser.java
private String name;
private String surname;
private String email;
private String telephone;
...
getters and setters();
constructor();

私は通常、次のように、あるオブジェクトを別のオブジェクトに変換するメソッドを作成します。

 User m1 = new User();
 MyUser m2 = new MyUser();
 m2.setName(m1.getName());
 m2.setsurmame(m1.getsurname());

...等々...

誰かがこの種のことをする別の方法を知っていますか?

4

5 に答える 5

1

できることの1つは、そのUserオブジェクトをMyUserクラスのメソッドまたはクラスのコンストラクターに渡してMyUserから、それらのセッターを実行することです。

コンストラクターの使用:

public MyUser(User u){
    setName(u.getName());
    setSurname(u.getSurname());
    ...
}

または、別のメソッドを作成します。

public void setMyUser(User u){
   setName(u.getName());
   setSurname(u.getSurname());
   ...
}

次に、次のように使用できます。

User u = new User();
//hope all values are set in User u object
MyUser m = new MyUser(u);
于 2012-12-13T17:47:34.863 に答える
1

CSharpにはAutoMapperプロジェクトがあります。

その要点は、ソースインスタンスからデスティネーションインスタンスにプロパティをマッピングする簡単な方法を提供します。デスティネーションインスタンスでは、ソースインスタンスとデスティネーションインスタンスを異なるクラスにすることができます。

このリンクは、Javaの同様のプロジェクトに関するいくつかの興味深い考えを共有しています:Automapper for Java

于 2012-12-13T17:43:34.357 に答える
1

オブジェクトコンポジションを使用する他のライブラリを使用して作成するオブジェクトの場合、のインスタンスを作成しますExternalUser。ただし、ローカルで作成する場合は、を作成しますBrandNewUser。次に、パススルー合成メソッドを使用する1つのバージョンと、独自の内部実装を使用してコードによって作成されたバージョンを使用して、それらを同じように扱うことができます。

次のようにオブジェクトを作成できます。

public interface MyUser {
  // all the methods you need
  String getSurname();
}

public class ExternalUser implements MyUser {
  private User _user;
  private ExternalUser() { }
  public ExternalUser(User u) {
    this._user = u;
  }
  public String getSurname() {
    return _user.getSurname();
  }
}

public class BrandNewUser implements MyUser {
  private String _surname;
  public ExternalUser(String name, String surname) {
    this._surname = surname;
  }
  public String getSurname() {
    return _surname;
  }
}
于 2012-12-13T17:51:27.027 に答える
1

必要に応じて、プロパティやロジックを複製するのではなく、これらのオブジェクトをリファクタリングして相互に継承します。

オブジェクトを離しておく必要がある場合は、さまざまなクローンツールのいずれかを使用して、オブジェクトからオブジェクトへのディープコピーを実行できます。これがまともな、網羅的ではないリストです:

于 2012-12-13T17:51:46.313 に答える
0

たぶん、コピープロパティ機能を提供するbeanutilsを使用できます。 http://commons.apache.org/beanutils/

于 2012-12-13T17:52:11.253 に答える