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 的所有字段(从数据库中刷新)。那么如何将 的所有属性设置this为 的对应值refreshedFoo,而不为每个属性编写赋值呢?

4

6 回答 6

3

除非您使用某些库(可能基于反射)来做同样的事情,否则除了分配每个属性之外,没有其他方法可以分配每个属性。

另一种方法是使用新实例refreshedFoo并丢弃旧实例,如果您的应用程序可能这样做的话。也许你可以有一个 ProxyFoo ,它只包含一个指向可以打开刷新的 Foo 的指针?

于 2012-10-19T08:25:50.767 回答
2

有两种方法,一种方法是实现Clonable接口和调用clone()方法,第二种方法是创建一个构造函数,将 Foo 对象作为参数并赋值,所以每次调用该对象。

并且将刷新方法放在FOODAO另一个类中,而FOO是模型对象,所以不应该有刷新方法。这样问题就迎刃而解了

于 2012-10-19T08:28:32.953 回答
0

除了使用一些黑魔法反射黑客之外,我认为没有办法做到这一点:)

于 2012-10-19T08:26:38.760 回答
0

您将不得不为每个属性使用分配。如果您不打算手动执行此操作,您可以使用任何可用的库,例如 Apache commons 提供的类 BeanUtils。它有一个方法copyProperties。在这种情况下,您可以使用它。

于 2012-10-19T08:27:57.707 回答
0

使用诸如 hibernate 之类的 ORM 来避免手动编写代码。或者使用 spring 有行映射器,这减少了对此类代码的需求。

唯一的另一种方法是使用力量的黑暗面:反射。

于 2012-10-19T08:29:06.203 回答
0

您可以使用apache commons beanutils 中的copyProperties

于 2012-10-19T08:52:21.157 回答