code: public static<E, T extends ParamValidator<E>> T getValidator(Class<T> clazz, Param<Boolean> param) {
  
          // get if such validator was already initialized
          List<ParamValidator> validators = validatorsMap.get(clazz);
          if (validators == null) {
              addValidators(validatorsMap, clazz, null, null);
          }
  
          // start searching from index 2 - from this index and on, the list preserves <ParamValidatorWrapper> specific instances
          for (int i=2; i<validators.size(); i++) {
              ParamValidator validator = validators.get(i);
  
              if (validator.getClass() == ParamValidatorWrapper.class &&
                  ((ParamValidatorWrapper)validator).ifParam == param) {
  
                  return (T)validator;
              }
  
          }
  
          T validator = (T)new ParamValidatorWrapper<E>(clazz, param);
          validators.add(validator);
  
          return validator;
      }
docs: wrap a validator for the given class type and according to the configured value og the given parameter.
  Meaning, the relevant validator will be created according to the the current value of <param>.