java程序员都知道,我们通过父类派生出来的子类,其中子类的实例是直接可以赋值给父类的对象的,而且不需要做任何类型转换,但是做个赋值的操作其实并没有改变子类对象的任何东西,父类的对象只是拿到了子类的引用而已,通过查看赋值后的父类对象的类型,依然看到的子类的类型。
有时候我们有这样一种需求,有个父类对象需要通过赋值的方式初始化子类对象,而父类是不可以直接赋值给子类对象的,否则会报异常,这个时候我们直接会想到最笨的办法就是,将父类对象的所有成员逐个赋值到子类对应的成员,这个当然没有问题,但是如果我们的成员有变动化,就要去修改赋值方法,很麻烦。
以下代码展示了如何使用通用的方法,将成员全部赋值,避免遗忘,这个操作可以是通过构造函数,也可以是通过方法等实现,其实原理也是循环所有成员逐个赋值。
public StockRealCache(StockRealData subInstance) {
try {
Class<?> clazz = subInstance.getClass();
Field[] fields = clazz.getFields();
for (Field subField : fields) {
Field supprField = getClass().getField(subField.getName());
supprField.setAccessible(true);
supprField.set(this, subField.get(subInstance));
}
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}