Java同步同一类的对象的属性

时间:2012-10-19 08:23:01

标签: java

我有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的相应值,而不为每个属性编写赋值?

6 个答案:

答案 0 :(得分:3)

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

另一种方法是使用新实例refreshedFoo并丢弃旧实例(如果可以为您的应用程序使用)。也许你可以拥有一个只包含指向Foo的指针的ProxyFoo,可以在刷新时切换?

答案 1 :(得分:2)

有两种方法,一种是实现Clonable接口和调用clone()方法的方法,另一种是创建一个构造函数,它将Foo Object作为参数并分配值,因此每次调用该对象时。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

您可以使用apache commons beanutils中的copyProperties