code: public void setValue(Object obj, Object value) {
      if (setters.length > 0) {
        for (Method method : setters) {
          if (value == null || method.getParameterTypes()[0].isAssignableFrom(value.getClass())) {
            try {
              method.invoke(obj, value);
              return;
            } catch (IllegalAccessException | InvocationTargetException e) {
              // try to set field directly
            }
          }
        }
      }
      setFieldValue(field, obj, value);
    }
docs: Sets this field in the given object to the given value using reflection.
  
  <p>If the field is final, it checks that the value being set is identical to the existing
  value.