int length = Array.getLength(source);
Object targetArray = Array.newInstance(targetComponentType, length);
ConversionExecutor converter = getElementConverter(sourceComponentType, targetComponentType);
for (int i = 0; i < length; i++) {
Object value = Array.get(source, i);
Array.set(targetArray, i, converter.execute(value));
}
return targetArray;
}
private ConversionExecutor getElementConverter(Class<?> sourceComponentType, Class<?> targetComponentType) {