code: private String convertMethodKeyObject(final KeyGenerator methodGenerator, final Object keyValue) {
          String res = "";
          if (keyValue instanceof String) {
              res = (String) keyValue;
          } else {
              try {
  
                  // The default annotation value is toString
                  final List<Method> converterList = ClassUtility.retrieveMethodList(keyValue.getClass(), methodGenerator.value());
  
                  Method converter = null;
                  for (final Method m : converterList) {
                      if (m.getParameterTypes().length == 0) {
                          converter = m;
                      }
                  }
  
                  if (converter == null) {
                      LOGGER.log(METHOD_NOT_FOUND, methodGenerator.value(), keyValue.getClass().getSimpleName());
                  } else {
                      // The toString will be called for a string
                      final Object localKey = converter.invoke(keyValue);
  
                      if (localKey == null) {
                          LOGGER.log(NULL_METHOD_KEY_STRING, converter.getName(), keyValue.getClass().getSimpleName());
                      } else {
                          res = localKey.toString();
                      }
                  }
              } catch (final SecurityException e) {
                  LOGGER.log(NO_TOSTRING_KEY_METHOD, methodGenerator.value(), keyValue.getClass().getSimpleName(), e);
              } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                  LOGGER.log(METHOD_KEY_TOSTRING_FAILURE, methodGenerator.value(), keyValue.getClass().getSimpleName(), e);
              }
          }
          return res + "|";
      }
docs: Convert the key returned by an annotated method to a string (using annotation value or not).
  
  @param methodGenerator the method annotation
  @param keyValue the returned key value
  
  @return the key converted from object