code: public static Type getLowerBoundOfSingleTypeParameter(Type type) {
          if (type == null) {
              throw new IllegalArgumentException("Method parameter type must not be null.");
          }
  
          // The generic type may contain the generic type declarations, e.g. List<String>.
          if (!(type instanceof ParameterizedType)) {
              throw new IllegalArgumentException("Cannot obtain the component type of " + type +
                      ", it does not declare generic type parameters.");
          }
  
          // Only the ParametrizedType contains reflection information about the actual type.
          ParameterizedType parameterizedType = (ParameterizedType) type;
  
  
          Type[] typeArguments = parameterizedType.getActualTypeArguments();
  
          // We expect exactly one argument representing the model type.
          if (typeArguments.length != 1) {
              signalUnsupportedNumberOfTypeDeclarations(type);
          }
  
          Type typeArgument = typeArguments[0];
  
          // Wildcard type <X ... Y>
          if (typeArgument instanceof WildcardType) {
              WildcardType wildcardType = (WildcardType) typeArgument;
              Type[] lowerBounds = wildcardType.getLowerBounds();
              if (lowerBounds.length == 0) {
                  throw new IllegalArgumentException("Cannot obtain the generic type of " + type +
                          ", it has a wildcard declaration with an upper" +
                          " bound (<? extends Y>) and is thus read-only." +
                          " Only simple type parameters (e.g. <MyType>)" +
                          " or lower bound wildcards (e.g. <? super MyModel>)" +
                          " are supported.");
              }
              typeArgument = lowerBounds[0];
          }
          return typeArgument;
      }
docs: Resolves the {@link Type} of the lower bound of a single type argument of a
  {@link ParameterizedType}.
  <p/>
  <pre>
  private List&lt;MyModel&gt; myModel -&gt; MyModel.
  private Optional&lt;MyModel&gt; myModel -&gt; MyModel.
  </pre>
  
  @param type must not be <code>null</code>.
  @return never null.