docs: public static List<Class> getMethodGenericParameterTypes(Method method, int index) {
      	List<Class> results = new ArrayList<Class>();
      	Type[] genericParameterTypes = method.getGenericParameterTypes();
      	if (index >= genericParameterTypes.length ||index < 0) {
  			throw new IllegalArgumentException("index "+ (index<0 ? " must > 0 " : " over total arguments"));
  		}
      	Type genericParameterType = genericParameterTypes[index];
      	if(genericParameterType instanceof ParameterizedType){
      	     ParameterizedType aType = (ParameterizedType) genericParameterType;
      	     Type[] parameterArgTypes = aType.getActualTypeArguments();
      	     for(Type parameterArgType : parameterArgTypes){
      	         Class parameterArgClass = (Class) parameterArgType;
      	         results.add(parameterArgClass);
      	     }
      	     return results;
      	}
      	return results;
      }