code: public static Class<?> resolveArgument(Type genericType, Class<?> targetType) {
          Class<?>[] arguments = resolveArguments(genericType, targetType);
          if (arguments == null)
              return Unknown.class;
  
          if (arguments.length != 1)
              throw new IllegalArgumentException("Expected 1 type argument on generic type "
                      + targetType.getName() + " but found " + arguments.length);
  
          return arguments[0];
      }
docs: Resolves the type argument for the {@code genericType} using type variable information from the
  {@code sourceType}. If {@code genericType} is an instance of class, then {@code genericType} is
  returned. If no arguments can be resolved then {@code Unknown.class} is returned.
  
  @param genericType to resolve upwards from
  @param targetType to resolve arguments for
  @return type argument for {@code initialType} else {@code null} if no type arguments are
  declared
  @throws IllegalArgumentException if more or less than one type argument is resolved for the
  give types