嗨,我必须从一个对象构造一个对象。由于基类有超过50个字段,我不想做像
这样的事情//obj1 is an instance of BaseClass
DerivedClass obj2 = new DerivedClass();
obj2.setField1(obj1.getField1());
obj2.setField2(obj1.getField2())
.... so on
正如你从标题中看到的,我想向下转换我的对象,但java不允许这样做。是否有实用程序库或smth提供类似
的方法Object convert(BaseClass obj1, DerivedClass obj2)
答案 0 :(得分:2)
您可以使用Apache Commons BeanUtils执行此操作。使用其BeanUtils
类,您可以访问许多实用程序方法,以通过反射填充JavaBeans属性。
要将所有公共/继承属性从基类对象复制到派生类对象,可以使用其静态copyProperties()
方法
BeanUtils.copyProperties(baseClassObj, derivedClassObj);
来自BeanUtils.copyProperties()文档
对于属性名称相同的所有情况,将属性值从原始bean复制到目标bean。
如果您不想使用第三方库,那么您的下一个最佳选择是在派生类上提供一个实用程序方法,该方法使用其父类的实例的所有属性初始化自身。
public void initFromParent(BaseClass obj) {
this.propOne = obj.getPropOne();
// ... and so on
}
答案 1 :(得分:0)
如果演员表有效,您可以向下转播:
BaseClass instance = new DerivedClass();
if(DerivedClass.class.isAssignableFrom(instance.getClass()) {
DerivedClass dc = DerivedClass.class.cast(instance);
}
但通常会实现一个具有相同参数的构造函数并调用super()
。
甚至更好,使用组合,其中DerivedClass不是继承而是拥有BaseClass的实例,并将字段的调用委托给该对象。