BeanUtils.copyProperties делает глубокий клон?

Чтобы проверить это, я быстро выбрал следующее:

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 ответ

Решение

Вы должны сделать свой 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Напечатано "ноль".

Другие вопросы по тегам