code: public Class<?> getNestedParameterType() {
          if (this.nestingLevel > 1) {
              Type type = getGenericParameterType();
              for (int i = 2; i <= this.nestingLevel; i++) {
                  if (type instanceof ParameterizedType) {
                      Type[] args = ((ParameterizedType) type).getActualTypeArguments();
                      Integer index = getTypeIndexForLevel(i);
                      type = args[index != null ? index : args.length - 1];
                  }
              }
              if (type instanceof Class) {
                  return (Class<?>) type;
              } else if (type instanceof ParameterizedType) {
                  Type arg = ((ParameterizedType) type).getRawType();
                  if (arg instanceof Class) {
                      return (Class<?>) arg;
                  }
              }
              return Object.class;
          } else {
              return getParameterType();
          }
      }
docs: Return the nested type of the method/constructor parameter.
  
  @return the parameter type (never {@code null})
  @see #getNestingLevel()