BeanUtils.copyProperties(子类,超类)为子类字段值

时间:2015-10-16 04:53:15

标签: java inheritance copy apache-commons-beanutils

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

我发现这个帖子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数组值相同,那么我只需要将前一个子类的属性复制到当前子类。我很好奇这是否会复制所有属性,或只是子类本身的少数属性?我会假设一切,但从现在的问题来看,我不太确定......

感谢。

1 个答案:

答案 0 :(得分:3)

正如您在演示代码中所述,您访问的属性不是访问者,而BeanUtils不访问属性,而是访问访问者。如果您没有属性的getter / setter,请确保BeanUtils没有复制任何内容。

另一方面,我想告诉你BeanUtils.copyProperties这一点指向BeanUtilsBean.copyProperties )的Javadoc声明如下:

  

如果您知道不需要类型转换,PropertyUtils中的copyProperties()方法将比此方法执行得更快。

因此,当您从超类复制到子类时,我想没有类型转换,因此请使用PropertyUtils.copyProperties重新考虑。

相关问题