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]