BeanUtils.cloneBean and Covariant (Overriding) return types
-----------------------------------------------------------
Key: BEANUTILS-281
URL: https://issues.apache.org/jira/browse/BEANUTILS-281
Project: Commons BeanUtils
Issue Type: Bug
Components: Bean / Property Utils
Environment: JDK1.5
Reporter: Onur Kutlu GAGO
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 {
public abstract Serializable getField();
}
***************************
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() {
return field;
}
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());
}
}
***************************
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]