我正在寻找如何将父类(super class)对象的数据复制到子类。
我找到了这个帖子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,但如果我打印face[i].x,我会得到所有值。
基本上,子类从父类(super class)获取所有值,并添加一些我需要使用的额外数据。
我是不是做错了什么......?
此外,循环中有一点,如果最后一个和当前数组值相同,那么我只需要将属性从前一个子类复制到当前子类。我很好奇这是否会复制所有属性,还是只是子类本身的少数属性?我会假设一切,但从现在的问题来看,我不太确定......
谢谢。
最佳答案
正如您在演示代码中所述,您访问属性而不是访问器,并且 BeanUtils 不访问属性而是访问器。如果您的属性没有 getter/setter,请确保 BeanUtils 不会复制任何内容。
另一方面,我想告诉您 BeanUtils.copyProperties
的 Javadoc(这个指向 BeanUtilsBean.copyProperties
)指出以下内容:
If you know that no type conversions are required, the copyProperties() method in PropertyUtils will execute faster than this method.
因此,当您从父类(super class)复制到子类时,我想没有类型转换,因此请重新考虑使用 PropertyUtils.copyProperties
。
关于java - BeanUtils.copyProperties(subclass,superclass) 对于子类字段值返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33162805/