2

私はDAOを持っています。

public class Foo {
   private final int ID;
   private String text;
   private String title;

   public void refresh() {
      Foo refreshedFoo=Database.getInstance().getFooById(ID);
      // *** Problem here ***
    }
   // ... Getters and setters for all fields
}

時々、DAO のすべてのフィールドを更新する必要があります (DB から更新します)。では、各プロパティの割り当てを記述せずに、 のすべてのプロパティthisを の対応する値に設定するにはどうすればよいでしょうか?refreshedFoo

4

6 に答える 6

3

ライブラリ(おそらくリフレクションに基づく)を使用して同じことをしない限り、各プロパティを割り当てる以外に各プロパティを割り当てる方法はありません。

別の方法は、新しいインスタンスを使用しrefreshedFooて古いインスタンスを破棄することです (それがアプリケーションで可能な場合)。たぶん、更新時に切り替えることができる Foo へのポインターを含む ProxyFoo を持つことができますか?

于 2012-10-19T08:25:50.767 に答える
2

1 つはClonableインターフェースを実装してメソッドを呼び出すclone()方法、もう 1 つは Foo オブジェクトを param として取得して値を代入するコンストラクターを作成する方法で、そのオブジェクトを呼び出すたびに呼び出します。

またFOODAO別クラスにrefreshメソッドを配置し、FOOはモデルオブジェクトなのでrefreshメソッドを持たないようにします。このようにして問題は解決されます

于 2012-10-19T08:28:32.953 に答える
0

apachecommonsbeanutilsのcopyPropertiesを使用できます。

于 2012-10-19T08:52:21.157 に答える
0

黒魔術の反射ハッキングを使用する以外に、それを行う方法はないと思います:)

于 2012-10-19T08:26:38.760 に答える
0

プロパティごとに割り当てを使用する必要があります。手動で行うつもりがない場合は、Apache commons がクラス BeanUtils を提供しているように、同じために利用可能な任意のライブラリを使用できます。メソッド copyProperties を持っています。この場合はそれを使用できます。

于 2012-10-19T08:27:57.707 に答える
0

hibernate などの ORM を使用して、手動でコードを記述しないようにします。または、春には行マッパーがあり、そのようなコードの必要性を減らします。

他の唯一の方法は、フォースのダークサイドであるリフレクションを使用することです。

于 2012-10-19T08:29:06.203 に答える