in src/main/java/org/apache/commons/beanutils2/LazyDynaList.java [461:503]
public void setElementType(final Class<?> elementType) {
if (elementType == null) {
throw new IllegalArgumentException("Element Type is missing");
}
final boolean changeType = this.elementType != null && !this.elementType.equals(elementType);
if (changeType && !isEmpty()) {
throw new IllegalStateException("Element Type cannot be reset");
}
this.elementType = elementType;
// Create a new object of the specified type
Object object = null;
try {
object = elementType.newInstance();
} catch (final Exception e) {
throw new IllegalArgumentException("Error creating type: "
+ elementType.getName() + " - " + e);
}
// Create a DynaBean
DynaBean dynaBean = null;
if (Map.class.isAssignableFrom(elementType)) {
dynaBean = createDynaBeanForMapProperty(object);
this.elementDynaClass = dynaBean.getDynaClass();
} else if (DynaBean.class.isAssignableFrom(elementType)) {
dynaBean = (DynaBean)object;
this.elementDynaClass = dynaBean.getDynaClass();
} else {
dynaBean = new WrapDynaBean(object);
this.wrapDynaClass = (WrapDynaClass)dynaBean.getDynaClass();
}
this.elementDynaBeanType = dynaBean.getClass();
// Re-calculate the type
if (WrapDynaBean.class.isAssignableFrom(elementDynaBeanType )) {
this.elementType = ((WrapDynaBean)dynaBean).getInstance().getClass();
} else if (LazyDynaMap.class.isAssignableFrom(elementDynaBeanType )) {
this.elementType = ((LazyDynaMap)dynaBean).getMap().getClass();
}
}