我正在查找如何将超类对象的数据复制到子类。
我发现这个帖子How to copy superclass object values to subclass object values?链接到另一个说使用BeanUtils.copyProperties的线程。
我使用了上面的代码
BeanUtils.copyProperties(subclass,superclass);
但是当我尝试从子类中打印值时,我为值
得到null this.face = new FaceData[faces];
this.f = new FaceSubData[faces];
for(int i = 0; i < faces; i++)
{
this.face = //somevalue
this.f[i] = new FaceSubData();
try
{
BeanUtils.copyProperties(f[i], face[i]);
System.out.println(f[i].x);
}
catch (IllegalAccessException | InvocationTargetException ex)
{
Logger.getLogger(PlanHead.class.getName()).log(Level.SEVERE, null, ex);
}
如果我打印f [i] .x我得到null,但如果我面对[i] .x我得到所有的值。
基本上,子类从超类中获取所有值,并添加了一些我需要处理的额外数据。
我做错了什么......?
此外,循环中有一点,如果last和current数组值相同,那么我只需要将前一个子类的属性复制到当前子类。我很好奇这是否会复制所有属性,或只是子类本身的少数属性?我会假设一切,但从现在的问题来看,我不太确定......
感谢。
答案 0 :(得分:3)
正如您在演示代码中所述,您访问的属性不是访问者,而BeanUtils
不访问属性,而是访问访问者。如果您没有属性的getter / setter,请确保BeanUtils
没有复制任何内容。
另一方面,我想告诉你BeanUtils.copyProperties
(这一点指向BeanUtilsBean.copyProperties
)的Javadoc声明如下:
如果您知道不需要类型转换,PropertyUtils中的copyProperties()方法将比此方法执行得更快。
因此,当您从超类复制到子类时,我想没有类型转换,因此请使用PropertyUtils.copyProperties
重新考虑。