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