1

しばらく頭に浮かぶ質問があります。次のクラスがあるとしましょう。

public Class Person{
    String name;
    String address;
    String description;
}

public Class PersonFacade{
    String name;
    String address;
    String desc;
}

ご覧のとおり、これら2つのクラスの唯一の違いは、1つの変数の名前です。私の質問は、あるオブジェクトの値を別のオブジェクトにマップするためのヘルパークラスを作成するための最良の方法は何ですか。次のものがあると仮定しましょう。

Person person = new Person();
person.name="name1";
person.address="address1";
person.description="description1";

次のことを行うことになっているクラスを書きたい(それをTransformerクラスと呼びましょう)

PersonFacade personFacade = new PersonFacade();
TransformClass.transformFrom(person, personFacade);

このTransformClass.transformFrom()方法で実行したいのは、次のとおりです。

変数名の類似性に基づいて、変数の値を「FromClass」から「ToClass」に割り当てます。この場合、割り当てたいので、personFacade.name = "name1"(この最後の1つは達成するのが難しいようですが、試してみましょう)personFacade.address="adderss1"personFacade.desc = "description1"

何か案は?

4

2 に答える 2

3

あなたはドーザーを使うことができます:

Dozerは、あるオブジェクトから別のオブジェクトにデータを再帰的にコピーするJavaBeanからJavaBeanへのマッパーです。通常、これらのJavaBeanはさまざまな複合型になります。

Dozerは、単純なプロパティマッピング、複雑なタイプマッピング、双方向マッピング、暗黙的明示的マッピング、および再帰的マッピングをサポートしています。これには、要素レベルでのマッピングも必要なコレクション属性のマッピングが含まれます。

これを見てください:http://dozer.sourceforge.net/

これは優れたJavaBeanマッパーです。

ここに「はじめに」:

http://dozer.sourceforge.net/documentation/gettingstarted.html

于 2012-10-02T20:48:21.507 に答える
1

おそらく、クラス間の関係を作成するために、独自のアノテーションクラスを作成できます。だから、例えば

public Class Person{
    @MyAnnotation(id='name')
    String name;

    @MyAnnotation(id='addr')
    String address;

    @MyAnnotation(id='desc')
    String description;
}

public Class PersonFacade{
    @MyAnnotation(id='name')
    String name;

    @MyAnnotation(id='addr')
    String address;

    @MyAnnotation(id='desc')
    String desc;
}

次に、TransformClassで、アノテーションを反復処理し、一致するものを見つけて、Reflectionを使用して対応するフィールド値を設定するだけです。

于 2012-10-02T21:04:20.907 に答える