ReflectionUtils { public static Method getNonStandardSetter(Class<?> clazz, String fieldName) { Field field; try { field = getFieldFromBean(clazz, fieldName); } catch (MappingException me) { return null; } String methodName = "set" + StringUtils.capitalize(fieldName); for (Method method : clazz.getMethods()) { if (isNonVoidSetter(method, methodName) || isAutoboxingSetter(method, methodName, field)) { return method; } } return null; } private  ReflectionUtils(); static PropertyDescriptor findPropertyDescriptor(Class<?> objectClass, String fieldName,
                                                            HintContainer deepIndexHintContainer); static DeepHierarchyElement[] getDeepFieldHierarchy(Class<?> parentClass, String field,
                                                               HintContainer deepIndexHintContainer); static Method getMethod(Object obj, String methodName); static Method getMethod(Class<?> clazz, String methodName); static Method findAMethod(Class<?> clazz, String methodName, BeanContainer beanContainer); static PropertyDescriptor[] getPropertyDescriptors(Class<?> objectClass); static Field getFieldFromBean(Class<?> clazz, String fieldName); static Object invoke(Method method, Object obj, Object[] args); static Method getMethod(Class<?> clazz, String name, Class<?>[] parameterTypes); static T newInstance(Class<T> clazz); static Class<?> determineGenericsType(Class<?> parentClazz, PropertyDescriptor propDescriptor); static Class<?> determineGenericsType(Class<?> clazz, Method method, boolean isReadMethod); static Class<?> determineGenericsType(Type type); static Method getNonStandardSetter(Class<?> clazz, String fieldName);  }
@Test public void testGetNonVoidSetterMethod() { Method method = ReflectionUtils.getNonStandardSetter(new NoVoidSetters().getClass(), "description"); assertNotNull(method); method = ReflectionUtils.getNonStandardSetter(new NoReadMethod().getClass(), "noReadMethod"); assertNull(method); }