BeanUtils.copyProperties是否进行深度克隆?

时间:2013-06-19 20:22:12

标签: java clone apache-commons-beanutils

为了测试这一点,我迅速掀起了以下内容:

public class Test {

public static void main(String[] args) {
try {
    Employee e = new Employee();
    e.setName("A");
    Employee y = new Employee();
//  y=e;
    BeanUtils.copyProperties(y, e);
    e.setName("B");
    System.out.println(y.getName());
} catch (Exception e) {
    e.printStackTrace();
}

}

}   
class Employee{
    String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

这应该打印A而不是打印null。这里出了什么问题? 如何才能将属性从一个对象复制到另一个对象(而不是让它们指向相同的值),并且BeanUtils.copyProperties首先创建一个深层副本?

1 个答案:

答案 0 :(得分:3)

您需要公开您的Employee课程。这段代码对我有用(并编译):

package com.sandbox;

import org.apache.commons.beanutils.BeanUtils;

public class Sandbox {

    public static void main(String[] args) {
        try {
            Employee e = new Employee();
            e.setName("A");
            Employee y = new Employee();
//  y=e;
            BeanUtils.copyProperties(y, e);
            e.setName("B");
            System.out.println(y.getName());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static class Employee {
        String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

    }
}

当我从public中删除Employee时,它会打印“null”。