Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Won't Fix
-
None
-
None
-
JDK1.5
Description
BeanUtils.cloneBean(Object) method does not copy the fields that are overriden by the subclasses. For example, consider an abstract class(AbstractVehicle) where you define an abstract getter for a field.
**************************
public abstract class AbstractVehicle
***************************
In a class (Car) that extends this abstract class (AbstractVehicle) you define the field itself and override the return type of the getter method (from Serializable to Integer):
***************************
public class Car extends AbstractVehicle {
private Integer field = null;
@Override
public Integer getField()
public void setField(Integer field)
{ this.field = field; }}
***************************
When you clone such objects (Car) this field is not copied! The following code prints 'null' instead of 5!
***************************
public class CopyTestMain {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException
{ final Car aCar = new Car(); aCar.setField(5); final Car copyCar = (Car) BeanUtils.cloneBean(aCar); System.out.println("Field = " + copyCar.getField()); }}
***************************