2013-06-19 2 views
3

Чтобы проверить это, я быстро соорудил следующее:Does 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 создать глубокую копию в первую очередь?

+0

Или почему Java-бобы - это не панацея;) – fge

ответ

2

Вам необходимо сделать публикацию класса 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, напечатанных «нуля».

+0

Действительно! Интересно, как вы считали, что отсутствие общественности вызывает проблему? Я переместил «Employee» в другой класс, и он показал A. Если бы я, вероятно, реализовал это как решение проблемы, с которой я столкнулся (вместо того, чтобы сделать простой простой прог, чтобы увидеть, будет ли это работать), я бы никогда не знал этого может быть проблемой :) – happybuddha

+0

На самом деле это было совпадение. Я исправил эту точную проблему за 10 минут до того, как вы задали свой вопрос. –

+0

Прохладный, спасибо, сэр – happybuddha