3

私はSpring FrameworkでいくつかのJavaコードを書いています。

person と person1 の 2 つの Bean があります。これらは構造がわずかに異なります。つまり、それぞれの変数名がわずかに異なります。

ある Bean から別の Bean に詳細をコピーしようとしています。値がnullでない場合にのみ値をコピーしたい。BeanUtils という API を見たことがありますが、これは null かどうかに関係なくコピーされます。

これが私のコードです:

if (person != null) {
       if (person.getAddressDetails() != null) {
               if (person.getAddressDetails().getStreetNumber() != null) {
                       person1.getAddressDetails().setStreetNo(person.getAddressDetails().getStreetNumber());
               }

               if (person.getAddressDetails().getStreetName() != null) {
                       person1.getAddressDetails().setStreetName(person.getAddressDetails().getStreetName());
               }
       }

       if (person.getHomeDetails() != null) {
               if (person.getHomeDetails().getPhoneNumber() != null) {
                       person1.getHomeDetails().setSPhoneNo(person.getHomeDetails().getPhoneNumber());
               }
       }
}

コピーする必要がある約 40 のノードがあり、これにより非常に醜いコードが作成されます。誰かがこれを行うためのより良い方法を持っていますか? 多分私がマッピングか何かを作ってそれをループしたら?わからない。

そうでない場合、null 値をコピーせずに BeanUtils にコピーを実行させることができるかどうかは誰にもわかりませんか?

理由は、2 番目の Bean である person1 にすでに多数の値があるためです。上書きする新しい値がある場合にのみ、それを上書きしたいと思います。

いつものように、変数ははるかに大きなシステムの一部であり、名前を標準化することはできません。

ありがとう

4

2 に答える 2

5

別の方向から問題にアプローチします。ソース データ オブジェクトは、ターゲット オブジェクトの制約やビジネス ロジック要件を気にする必要はありません。

特にSpringを使用している場合は、SpringなどのIoCコンテナが支援しようとしているのとまったく同じことをします

ソースnull checkingプロパティsetXXX()null.

public setXXX(final String s)
{
  if (s == null) { // do nothing }
  else { this.xxx = s; }
}

nullその後、必要なマッピング戦略/ライブラリを使用でき、ソースデータのステータスを心配する必要はありません. プロパティをやみくもに設定し、着信をいつ無視するかをターゲットに決定させnullます。

于 2011-05-04T03:01:39.373 に答える
2

ブルドーザーがあなたを助けてくれるのではないかと思います。

于 2011-05-04T03:15:51.457 に答える