BeanUtils.copyProperties(subclass,superclass) returns 子类字段值为空

BeanUtils.copyProperties(subclass,superclass) returns null for subclass field values

我在查找如何将超类对象的数据复制到子类。

我发现这个帖子 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 我得到空值,但如果我打印 face[i].x 我得到所有值。

基本上子类从超类获取所有值,并添加一些我需要使用的额外数据。

我是不是做错了什么...?

此外,循环中有一点,如果最后一个和当前数组值相同,那么我只需要将前一个子类的属性复制到当前子类..我很好奇这个将复制所有属性,还是仅复制子类本身的少数属性?我会假设一切,但从现在的问题来看我不太确定...

谢谢。

正如您在演示代码中所述,您访问的是属性而不是访问器,BeanUtils 访问的不是属性而是访问器。如果您的属性没有 getters/setters,请确保 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.

所以当你从超类复制到子类时,我猜没有类型转换,所以重新考虑使用 PropertyUtils.copyProperties