code: protected final void init() {
  
      Type genericComponentType = null;
      Type genericKeyType = null;
      if (this.type instanceof GenericArrayType) {
        GenericArrayType arrayType = (GenericArrayType) this.type;
        genericComponentType = arrayType.getGenericComponentType();
      }
      if (genericComponentType == null) {
        TypeVariable<?> keyTypeVariable = null;
        TypeVariable<?> componentTypeVariable = null;
        if (this.retrievalClass.isArray()) {
          genericComponentType = this.retrievalClass.getComponentType();
        } else if (Collection.class.isAssignableFrom(this.retrievalClass)) {
          componentTypeVariable = CommonTypeVariables.TYPE_VARIABLE_COLLECTION_ELEMENT;
        } else if (Map.class.isAssignableFrom(this.retrievalClass)) {
          componentTypeVariable = CommonTypeVariables.TYPE_VARIABLE_MAP_VALUE;
          keyTypeVariable = CommonTypeVariables.TYPE_VARIABLE_MAP_KEY;
        }
        if (componentTypeVariable != null) {
          genericComponentType = resolveTypeVariable(componentTypeVariable, this);
          if (genericComponentType == null) {
            genericComponentType = componentTypeVariable;
          }
        }
        if (keyTypeVariable != null) {
          genericKeyType = resolveTypeVariable(keyTypeVariable, this);
          if (genericKeyType == null) {
            genericKeyType = keyTypeVariable;
          }
        }
      }
      if (genericComponentType == null) {
        this.componentType = null;
      } else {
        this.componentType = create(genericComponentType, this.definingType);
      }
      if (genericKeyType == null) {
        this.keyType = null;
      } else {
        this.keyType = create(genericKeyType, this.definingType);
      }
    }
docs: Initializes this class.