code: public static Method getSetter(Class<?> clazz, String fieldName) {
          StringBuilder sb = new StringBuilder("set").append(
                  Character.toUpperCase(fieldName.charAt(0))).append(fieldName,
                  1, fieldName.length());
          final String internedName = sb.toString().intern();
          return traverseHierarchy(clazz, new TraverseTask<Method>() {
  
              @Override
              public Method run(Class<?> clazz) {
                  Method[] methods = clazz.getDeclaredMethods();
                  Method res = null;
  
                  for (int i = 0; i < methods.length; i++) {
                      Method m = methods[i];
                      if (isSetterSignature(m)) {
                          if (m.getName() == internedName
                                  && (res == null
                                  || res.getParameterTypes()[0].isAssignableFrom(m.getParameterTypes()[0]))) {
                              res = m;
                          }
                      }
                  }
  
                  return res;
              }
          });
      }
docs: Retrieves the setter method of the given class for the specified field
  name. The method traverses through all methods of all types that are in
  the inheritance hierarchie of the given class and tries to find a setter
  method with the return type void and exactly one parameter. If that
  method can not be found, null is returned.
  <p>
  A setter must have void return type and accept exactly one parameter.
  
  @param clazz     The class within to look for the setter method
  @param fieldName The field name for which to find the setter method
  @return The setter method for the given fieldName if it can be found,
  otherwise null