java - BeanUtils.copyProperties(subclass,superclass) 对于子类字段值返回 null

标签 java inheritance copy apache-commons-beanutils

我正在寻找如何将父类(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/

相关文章:

python - 在类范围内动态覆盖列表的内置函数

c# - 关于 C# 中的文件权限

python - 对象声明在 python 类中意味着什么,我应该使用它吗?

java - 将 Kundera 与 Cassandra 一起使用时 JPA 的连接类型?

java - 如何使用 DOM 解析器解析忽略 DOCTYPE 声明的 xhtml

java - 在其他类中使用类的实例?

C++ 覆盖基本成员值

c++ - 有没有标准的算法可以复制到?

C# 二维数组连接

java - 如何将互联网上的 XML 文件加载到字符串中