code: private static Type replaceTypeActualArgument(Type inType, final Map<Type, Type> resolvedTypes) {
          Type outType = inType;
  
          if (inType instanceof ParameterizedType) {
              final ParameterizedType finalType = ((ParameterizedType) inType);
              final Type[] actualArgs = ((ParameterizedType) inType).getActualTypeArguments();
  
              for (int i = 0; i < actualArgs.length; i++) {
                  Type argType = actualArgs[i];
                  while (resolvedTypes.containsKey(argType)) {
                      argType = resolvedTypes.get(argType);
                  }
  
                  // Do replace ActualArgument
                  argType = replaceTypeActualArgument(argType, resolvedTypes);
  
                  actualArgs[i] = argType;
              }
  
              outType = new ParameterizeTypeActualArgsDelegate(finalType, actualArgs);
          }
          return outType;
      }
docs: Replace {@link ParameterizedType#getActualTypeArguments()} method return value.
  In this we use {@link ParameterizeTypeActualArgsDelegate} delegate {@link ParameterizedType};
  Let {@link ParameterizedType#getActualTypeArguments()} return really class type.
  
  @param inType        Type
  @param resolvedTypes a Map<Type, Type>, {@link #getActualTypeArguments(Class, Class)}
  @return {@link ParameterizeTypeActualArgsDelegate}