@SuppressWarnings("unchecked")
public static <T> void invokeSetter(Field field, Class<T> clazz, T targetObject, Object value) throws IntrospectionException,
InvocationTargetException, IllegalAccessException, NoSuchMethodException {
PropertyDescriptor descriptor = new PropertyDescriptor(field.getName(), clazz);
Method setter = descriptor.getWriteMethod();
if (setter != null) {
Class<?> targetClass = setter.getParameterTypes()[0];
if (value != null && Number.class.isAssignableFrom(targetClass)) {
Number numValue = (Number) value;
numValue = convertNumberType(numValue, (Class<? extends Number>) targetClass);
setter.invoke(targetObject, numValue);
} else {
setter.invoke(targetObject, value);
}
} else {
throw new NoSuchMethodException("No setter for " + descriptor.getDisplayName());
}
}